将最后一行输出添加到 bash 中的单独文件中

将最后一行输出添加到 bash 中的单独文件中

我编写了一个 bash 脚本,可以对程序执行 100 次迭代。每次迭代的输出都有 14 行,但我只需要第 14 行来进行其余的分析(也称为最后一行)。

我已经阅读了类似问题的答案,但它们都假设输出为命名行;而我的输出的第 10 行如下所示:

1 0 0.005 63.01

没有名字可以grep坚持。

我想采用第 10 行,对于 bash 脚本中完成的每次迭代,将输出附加到另一个文件 ( total_output.txt) 的底部,如下所示:

left right p-value ratio

1 0 0.005 63.01
1 0 0.02 67.23

每次迭代依此类推。优选地,这也可以在相同的 bash 脚本中,并且不必保存每次迭代的程序输出。

我对 Linux 和 bash 脚本还很陌生,所以如果这个问题看起来很愚蠢,我深表歉意。我真的无法理解如何将类似问题的答案应用于我的问题。

答案1

您可以使用tail仅获取最后一行,并将该行添加到文件中,total_output.txt如下所示:(这只适用于输出始终为 14 行并且您想要第 14 行,或者如果您总是想要最后一行)

your_program | tail -n 1 >> total_output.txt

该命令有 3 部分:

  • your_program运行程序并输出迭代的内容
  • | tail -n 1仅获取此输出的最后一行(以管道为前缀)
  • >> total_output.txt将最后一行添加到指定的文件中(以附加输出重定向器为前缀)

答案2

根据您的编辑,您总是想要最后的输出的行,而不是(如最初所示)特定的行号。

虽然这不会在固定长度输出的情况下使原始答案无效,但awk即使行数是可变的并且您只想选择最后一行,您也可以使用:

your_program | awk 'END{print}' >> total_output.txt

这利用了这样一个事实:在文件末尾(或输入结束),“当前”行仍然是最后读取的行。


原答案

grep您可以awk为此目的而不是使用:

your_program | awk 'NR==14' >> total_output.txt

这会将 only 的输出通过管道传输your_programawk,从而仅打印第 14 行。输出被重定向(以附加模式)到您所需的文件。

如果输出超过 14 行,并且您想要修剪以提高效率,请修改为

your_program | awk 'NR==14{print;exit}' >> total_output.txt

到达该线后立即结束该awk过程。

笔记(因为你写了输出“大约有10行”)如果你的输出实际上有较少的行,任何内容都不会添加到您的文件中!

相关内容