将多个文件的第n行读入单个输出

时间:2013-07-25 18:30:48

标签: bash syntax sed

我有一些名为dump_mydump_0.cfgdump_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

3 个答案:

答案 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语法更正 - dodone{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