对特定列求和并仅使用AWK获取另一列的唯一记录


1

我有一个如下输入文件:

19 | 17 | 1 | 89 | C | 9 | 100 | 9 | PL | 2175
20 | 17 | 1 | 89 | C | 9 | 100 | 9 | PL | 2175
21 | 17 | 2 | 89 | C | 9 | 100 | 9 | PL | 2175
23 | 17 | 2 | 89 | C | 9 | 100 | 9 | PL | 2175
24 | 17 | 1 | 89 | C | 9 | 100 | 9 | PL | 2175
27 | 17 | 1 | 89 | C | 9 | 100 | 9 | PL | 2175

我想单独列出6的列值,在第4,第5,第9和第10列,我想删除副本并打印单个值为PL2175

19 | 17 | 1 | {删除重复值和单值} | {删除重复值和单值} | {此处此处} |{sum here} | {sum here} | {删除重复 } | {删除重复}

我尝试了以下方法:

grep 0000000089181 输入文件 | awk -F'|' '
        { sum_p_all += $5} ;
        { sum_quantity += $6} ;
        { mean_p_unit = sum_p_all/sum_quantity} ;
        { sum_p_all2 = sum_p_all * 100} ;
        { mean_p_unit2 = mean_p_unit * 100}
END     { print sum_p_all2 " " sum_quantity " " mean_p_unit2 }'


1
假设您的列以“|”分隔,则可以轻松完成此操作; 但我发现很难将你的目标描述与你的数据相匹配:col 6不是数字; 你也加上第5列,然后划分一些平均值; 而且我不知道你的目标是如何在结束时产生3 col + |'es输出的。你能再试一次解释一下吗?
gnometorule 2013年

我的坏:6是数字,但你总和的5不是。
gnometorule 2013年

那么你想要总结一下?只有6的数字部分?只有14,5?请编辑您的问题并包含实际示例输出。另外,每列中你想要的总和是多少?整个文件中该列的总和?
terdon 2013年

澄清你的问题。例如,你说,“我想单独列出6的列值”,但你也显示了第7列和第8列的总和。对于另一示例, 1列中值开始0111 2栏是值1774列3中值开始0000000,依此类推。这使得一个人很难看到这些值,看看哪些是相同的,哪些是不同的。我试图删除不必要的重复,只留下必要的数据。请确认我没有损坏这个问题。
Scott

嗨gnometorule / terdon / scott-非常感谢您的快速回复。我昨天尝试了并得到了预期的答案..回答下面的答案
Bharath

Answers:


0

你究竟想要什么,直到我都不清楚; 但是下面的代码解释了你似乎想到的东西。它总结了所有的价值观; 并且只保留(打印)相对于所有第4,5,9和10列唯一的记录,在这种情况下,我们保持看到第一个这样的记录。cols打印为1,2,3,9,10,6,7,8。也许您可以根据需要进行调整,或提供更多信息。p / o未分类; 如果你想要按照col 1排序,只需将输出管道排序。 

#!/usr/bin/awk - f
# or your system's location
BEGIN{
   FS=OFS="|";
   s6=s7=s8=0;
   t="";
   a[""]="";
   seen[""]=0;
}

{
   s6 += $6;
   s7 += $7;
   s8 += $8;

   t = $4 $5 $9 $10;
   seen[t]++;
   if (seen[t] == 1)
      a[t] = $1 "|" $2 "|" $3 "|" $9 "|" $10 "|" $6 "|" $7 "|" $8;
}

END{
   for (i in a)
      print a[i];
   print s6, s7, s8;
 }

0

我刚尝试在awk中使用uniq并且它有效。

awk -F'|' '{column4 = uniq $ 4}; {coumn5 = uniq $ 5}; {coumn6 + = $ 6}; {column7 + = $ 7}; {column8 + = $ 8}; {column9 = uniq $ 9}; {coulmn10 = uniq $ 10} END {print column4“|” column5“|” column6“|” column7“|” column8“|” column9“|” column10}”

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.