在linux中获取N个行的多个文件

时间:2015-08-06 00:19:20

标签: linux csv awk sed echo

我想要完成的任务是,我有这样的文件:

test1.csv test2.csv test3.csv等...

我想获得每个文件的第3行。现在,我可以使用awk获得第3行,或者像

那样获得

echo | awk 'FNR == 3 { print; exit }' test1.csv >> last_file.csv或使用sed或tail。

但是当我尝试在多个文件上执行此操作时,它无法获取行。我想这样做,

echo | awk 'FNR == 3 { print; exit }' test*.csv >> last_file.csv

我怎样才能做到这一点?

谢谢。

4 个答案:

答案 0 :(得分:9)

摆脱无用的echo,错误的exit和多余的print

awk 'FNR == 3' test*.csv

答案 1 :(得分:2)

你应该使用

awk 'FNR == 3 { print; nextfile }' test*.csv >> last_file.csv

问题在于,当您使用exit时,它会完全阻止awk处理输入。 nextfile告诉awk停止处理当前文件并转到下一个文件。无需使用echo命令。

在这里阅读更多内容:

http://www.gnu.org/software/gawk/manual/html_node/Nextfile-Statement.html

答案 2 :(得分:1)

这可能适合你(GNU sed):

sed -sn 3p test*.csv >> last_file.csv

答案 3 :(得分:0)

如果要在目录及其子目录等所有文件中执行此操作,则

shopt -s globstar
awk 'FNR == 3' **/test*.csv