bash:如何将多个命令应用于同一个文件并连接输出

时间:2015-05-29 21:13:52

标签: bash awk

假设我想在制表符分隔文件中按列聚合值并保留标题。

我能做到:

  (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如何解释这些陈述?

1 个答案:

答案 0 :(得分:3)

通过测试awk

,在NR中完成所有操作
somecommand | awk 'NR == 1 { print; next } { s += $1 } END { print s }' > outfile

这会正常打印第一行,因为NR == 1,然后将剩余行中的第一列相加。