0

我有一些名为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
4

3 回答 3

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}而不是${lineNo}.

于 2013-07-25T18:39:06.960 回答
1

或者,使用 (GNU) awk:

awk "FNR==16{print;nextfile}" dump_mydump_{0..40000..250}.cfg > data.txt

(我使用了 OP 中显示的文件名,而不是 bash for 循环生成的文件名,如果更正后可以正常工作。但您可以根据需要进行编辑。)

优点是不需要 for 循环,也不需要产生 160 个进程。但这并不是一个巨大的优势。

于 2013-07-25T20:38:41.993 回答
0

这可能对您有用(GNU sed):

sed -ns '16wdata.txt' dump_mydump_{0..40000..250}.cfg
于 2013-07-25T21:23:25.057 回答