我想要完成的任务是,我有这样的文件:
test1.csv test2.csv test3.csv等...
我想获得每个文件的第3行。现在,我可以使用awk获得第3行,或者像sed一样
echo | awk 'FNR == 3 { print; exit }' test1.csv >> last_file.csv
或使用sed或tail。
但是当我尝试在多个文件上执行此操作时,它无法获取行。我想这样做,
echo | awk 'FNR == 3 { print; exit }' test*.csv >> last_file.csv
我怎样才能做到这一点?
谢谢。
摆脱无用的echo
,不正确的exit
和冗余的print
:
awk 'FNR == 3' test*.csv
你应该用
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
这可能适合你(GNU sed):
sed -sn 3p test*.csv >> last_file.csv
如果要在目录中的所有文件和子目录中执行此操作,依此类推。
shopt -s globstar
awk 'FNR == 3' **/test*.csv