我的命令如下:
cut -f 1 dummy_FILE |排序| uniq -c | awk'{print $ 2}'| for $ in $(cat - );做grep -w $ i dummy_FILE |
awk -v VAR =“$ i”'{distance + = $ 3- $ 2} END {print VAR,distance}';完成
cat dummy_FILE
Red 13 14
Red 39 46
Blue 45 23
Blue 34 27
Green 31 73
我想:
对于$ 1 dummy_FILE(红色,蓝色,绿色)中的每个单词 - 计算$ 3和$ 2之间差异的总和。
要获得如下输出:
Red 8
Blue -29
Green 42
我的问题是:
是否可以替换cut -f 1 dummy_FILE | sort | uniq -c | awk '{print $2}'
?
我正在使用sort | uniq -c
从数据集中提取每个单词 - 是否可以使用awk进行操作?
如何在cat
中克服无用的for i in $(cat -)
?
grep -w $i dummy_FILE
工作正常,但我想用awk替换它(我应该吗?);如果是这样我怎么能这样做?
当我尝试awk -v VAR="$i" '/^VAR/ '{distance+=$3-$2} END {print VAR, distance}'
时,我正在"fatal: division by zero attempted"
。
答案 0 :(得分:4)
我使用了它:
awk '{a[$1] = a[$1] + $3 - $2;} END{for (x in a) {print x" "a[x];}}' dummy_FILE
输出:
Blue -29
Green 42
Red 8
如果要对输出进行排序,只需在sort
命令后附加AWK
。
答案 1 :(得分:1)
这是使用awk
的一种方式:
awk '{ a[$1]=a[$1] + $3 - $2 } END { for(i in a) print i, a[i] }' dummy
结果:
Red 8
Blue -29
Green 42
如果你需要排序输出,你可以像arutaku建议的那样直接输入sort
:
awk '{ a[$1]=a[$1] + $3 - $2 } END { for(i in a) print i, a[i] }' dummy | sort
但是,您可以打印到sort
(在awk
声明中),如下所示:
awk '{ a[$1]=a[$1] + $3 - $2 } END { for(i in a) print i, a[i] | "sort" }' dummy