假设我想在制表符分隔的文件中按列聚合值并保留标题。
我能做到:
(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 如何解释这些语句?
最佳答案
通过测试 NR
在 awk
中完成这一切
somecommand | awk 'NR == 1 { print; next } { s += $1 } END { print s }' > outfile
由于 NR == 1
,这会正常打印第一行,然后对剩余行中的第一列求和。
关于bash:如何将多个命令应用于同一文件并连接输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30539170/