如何将任何列值的总和添加到制表符分隔文件中的最后一个记录的最后一列

时间:2012-10-31 20:40:47

标签: bash unix sed awk

我需要取第2列的总和并将值添加到最后一条记录的最后一列。请指教,我们如何使用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

3 个答案:

答案 0 :(得分:1)

假设您想在输出中保留空白区域:

$ 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

答案 1 :(得分:0)

我觉得这个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

答案 2 :(得分:0)

这是使用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