我编写了一个 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_program
到awk
,从而仅打印第 14 行。输出被重定向(以附加模式)到您所需的文件。
如果输出超过 14 行,并且您想要修剪以提高效率,请修改为
your_program | awk 'NR==14{print;exit}' >> total_output.txt
到达该线后立即结束该awk
过程。
笔记(因为你写了输出“大约有10行”)如果你的输出实际上有较少的行,任何内容都不会添加到您的文件中!