我需要取 col2 的总和并将值添加到最后一条记录的最后一列。请指教,我们如何使用 UNIX shell 脚本来实现这一点。
E.g Input file:
Col1 Col2 Col3 Col4
abc 2 A null
bcd 3 B null
adf 4 C null
Output file
Col1 Col2 Col3 Col4
abc 2 A null
bcd 3 B null
adf 4 C 9
假设您想在输出中保留空白:
$ awk '{sum+=$2; s=s $0 ORS} END{ sub("null"ORS"$",sum,s); print s}' file
Col1 Col2 Col3 Col4
abc 2 A null
bcd 3 B null
adf 4 C 9
或者:
$ awk '{sum+=$2; printf "%s",p} {p=$0 ORS} END{ sub("null$",sum); print}' file
Col1 Col2 Col3 Col4
abc 2 A null
bcd 3 B null
adf 4 C 9
我认为这个 awk 脚本会做到这一点:
awk '{sum+=$2; if (NR != 4) print; } END {$4=sum; print;}' infile
编辑:甚至更好:
awk '{sum+=$2; if (NR>1) print x; x=$0} END {$4=sum; print $0;}' infile
这是一种使用方法GNU awk
:
awk -v last="$(wc -l < file.txt)" 'NR == 1 { print; next } { sum += $2 } NR == last { sub($NF, sum) }1' file.txt
结果:
Col1 Col2 Col3 Col4
abc 2 A null
bcd 3 B null
adf 4 C 9