大家好我有一个看起来像这样的文件:
AAAA 5
BBBB 4
CCCC 12
...
(文件是制表符分隔的,有1000多行)
我感兴趣的是总结第二列值,这是直截了当的:
awk '{sum +=$2}END{print sum}'
在这3行的情况下,它的值为21.我想要做的是首先对文件中的所有第2列求和,然后打印col1,col2,col2 / sum。所以输出看起来像这样:
AAAA 5 0.2380
BBBB 4 0.1904
CCCC 12 0.5714
我试过的是:
awk '{sum +=$2}END{print $1,$2,$2/sum}'
但它似乎不起作用,我得到的是“CCCC 12 0.5714”要打印。我一直试图解决这个问题,但似乎无法得到它。任何帮助,将不胜感激。 感谢
答案 0 :(得分:2)
$ awk '{val[$1]=$2; sum+=$2} END{for (key in val) print key, val[key], (sum?val[key]/sum:0)}' file
CCCC 12 0.571429
BBBB 4 0.190476
AAAA 5 0.238095
保持输入顺序:
$ awk '!($1 in val){keys[++numKeys]=$1} {val[$1]=$2; sum+=$2} END{for (keyNr=1; keyNr<=numKeys;keyNr++) { key=keys[keyNr]; print key, val[key], (sum?val[key]/sum:0)} }' file
AAAA 5 0.238095
BBBB 4 0.190476
CCCC 12 0.571429
并格式化数字:
$ awk '!($1 in val){keys[++numKeys]=$1} {val[$1]=$2; sum+=$2} END{for (keyNr=1; keyNr<=numKeys;keyNr++) { key=keys[keyNr]; printf "%s %d %.4f\n", key, val[key], (sum?val[key]/sum:0)} }' file
AAAA 5 0.2381
BBBB 4 0.1905
CCCC 12 0.5714