假设我想在制表符分隔文件中按列聚合值并保留标题。
我能做到:
(head -n 1 <infile> && tail -n +2 | awk '{s+=$1} END {print s}' <infile>) > <outfile>
但是我要说输入来自管道(例如我在特定列上进行操作)。
我该怎么做?
下面的一个衬垫是否有效?
(head -n 1 && tail -n +2 | awk '{s+=$1} END {print s}') <infile> > <outfile>
如果我想只计算第k列,那么下面会有效吗?
cut -f<k> <infile> | (head -n 1 && tail -n +2 | awk '{s+=$1} END {print s}') > <outfile>
bash如何解释这些陈述?
答案 0 :(得分:3)
通过测试awk
NR
中完成所有操作
somecommand | awk 'NR == 1 { print; next } { s += $1 } END { print s }' > outfile
这会正常打印第一行,因为NR == 1
,然后将剩余行中的第一列相加。