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

标签 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 如何解释这些语句?

最佳答案

通过测试 NRawk 中完成这一切

somecommand | awk 'NR == 1 { print; next } { s += $1 } END { print s }' > outfile

由于 NR == 1,这会正常打印第一行,然后对剩余行中的第一列求和。

关于bash:如何将多个命令应用于同一文件并连接输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30539170/

相关文章:

linux - shell 脚本在 2 行中给出输出我只需要 1

来自带有管道、引号等的命令的 Bash 变量

linux - 如何在两个匹配模式之间但在第二个模式之前插入一条线

linux - 无法在 CentOS 中运行 cat 命令(参数列表太长)

regex - 如何在 shell 文件 (.sh) 中使用正则表达式来捕获 '\' 和换行符 (linefeed)?

c - 如何在C中运行shell命令

shell - 将 shell 变量替换为 awk 模式,查看文件扫描

linux - 使用awk按列匹配时如何删除原始行和重复行?

linux - 如何从 bash 获取 telnet 命令的输出?

linux - 如何在 Linux Bash 脚本文件中使用 'sed' 来注释掉带有制表符间距的特定行?