我有一些名为dump_mydump_0.cfg
,dump_mydump_250.cfg
,...的转储文件,一直到dump_mydump_40000.cfg
。对于每个转储文件,我想取出第16行,读取它们,并将它们放在一个文件中。
我正在使用sed
,但我遇到了一些语法错误。这是我到目前为止所做的:
for lineNo in 16 ;
for fileNo in 0,40000 ; do
sed -n "${lineNo}{p;q;}" dump_mydump_file${lineNo}.cfg >> data.txt
done
答案 0 :(得分:1)
考虑到您的文件以250
的间隔命名,您应该使用以下方式使用它:
for lineNo in 16; do
for fileNo in {0..40000..250}; do
sed -n "${lineNo}{p;q;}" dump_mydump_file${fileNo}.cfg >> data.txt
done
done
请注意bash语法更正 - do
,done
和{0..40000..250}
- 以及输入文件名,它们应取决于${fileNo}
而不是{ {1}}。
答案 1 :(得分:1)
或者,使用(GNU)awk:
awk "FNR==16{print;nextfile}" dump_mydump_{0..40000..250}.cfg > data.txt
(我使用了OP中显示的文件名,而不是bash for循环生成的文件名,如果纠正可行。但是你可以根据需要进行编辑。)
优点是您不需要for循环,也不需要生成160个进程。但这不是一个巨大的优势。
答案 2 :(得分:0)
这可能适合你(GNU sed):
sed -ns '16wdata.txt' dump_mydump_{0..40000..250}.cfg