获取N';linux中多个文件的第行
我要完成的任务是,我有这样的文件: test1.csv test2.csv test3.csv等 我想得到每个文件的第三行。现在,我可以使用awk或sed之类的工具获得第三行获取N';linux中多个文件的第行,linux,csv,awk,sed,echo,Linux,Csv,Awk,Sed,Echo,我要完成的任务是,我有这样的文件: test1.csv test2.csv test3.csv等 我想得到每个文件的第三行。现在,我可以使用awk或sed之类的工具获得第三行 echo | awk'FNR==3{print;exit}'test1.csv>>last_file.csv或使用sed或tail 但是当我尝试在多个文件上执行此操作时,它无法获取行。我想这样做 echo | awk'FNR==3{打印;退出}测试*.csv>>last_file.csv 我怎样才能做到这一点 谢谢。您应该
echo | awk'FNR==3{print;exit}'test1.csv>>last_file.csv
或使用sed或tail
但是当我尝试在多个文件上执行此操作时,它无法获取行。我想这样做
echo | awk'FNR==3{打印;退出}测试*.csv>>last_file.csv
我怎样才能做到这一点
谢谢。您应该使用
awk 'FNR == 3 { print; nextfile }' test*.csv >> last_file.csv
问题是,当您使用exit
时,它会阻止awk完全处理输入。下一个文件告诉awk停止处理当前文件并转到下一个文件。使用时不需要使用echo
命令
请在此处阅读更多信息:
清除无用的
回音
、不正确的退出
和冗余的打印
:
awk 'FNR == 3' test*.csv
这可能适用于您(GNU-sed):
如果你想在所有文件的目录和它的子目录等
shopt -s globstar
awk 'FNR == 3' **/test*.csv
你能给出你得到的输入和输出吗?你是说,如果我在多个文件上尝试它,输出吗?谢谢,这一个更好。@mau5这实际上效率更低,因为它处理整个文件,其中,由于nextfile命令允许我们在获得所需行后跳到下一个文件。效率是在必要时需要解决的问题,在脚本中加入性能改进,使其变得不那么简洁和不可移植,这毫无意义,因为它几乎肯定会像OPs真实文件一样在一眨眼之间运行(当人们有异常大的文件要处理时,他们总是告诉我们这一点)如果性能是一个问题,那么我们可以讨论选择和权衡。谢谢你的建议,我很感激。对于我的任务,该文件仅包含3或4行。但是,如果有人有一个相当大的文件,我希望他们会考虑“Nestfile”作为答案。抱歉搞混了,我应该在我的问题中提到。
shopt -s globstar
awk 'FNR == 3' **/test*.csv