猫从多个文件的X到Y行到一个文件

时间:2016-03-02 13:00:30

标签: awk sed cat tail head

我说3个不同的文件夹中有很多大文件,我想从中复制从同一个文件的X到Y的行,然后将它们附加到同名的新文件中。 我试着做了

ls seed1/* | while read FILE; do
head -n $Y  | tail -n $X seed1/$FILE seed2/$FILE seed3/$FILE  > combined/$FILE
done

这是$ FILE的第一个值的作业,但这不会返回提示,因此我无法执行此循环。

例如,我在三个不同的文件夹中有以下文件:seed1,seed2和seed3:

seed1/foo.dat
seed1/bar.dat
seed1/qax.dat

seed2/foo.dat
seed2/bar.dat
seed2/qax.dat

seed3/foo.dat
seed3/bar.dat
seed3/qax.dat

我想将所有文件中的10到20行合并到一个组合文件夹中:

combined/foo.dat
combined/bar.dat
combined/qax.dat

组合中的每个文件有30行,其中10个来自seed1,seed2和seed3。

1 个答案:

答案 0 :(得分:2)

不需要循环:

awk -v x=10 -v y=20 '
    FNR==1 { out = gensub(/.*\//,"combined/",1,FILENAME) }
    FNR>=x { print > out }
    FNR==y { nextfile }
' seed*/*.dat

以上假设"合并"在调用awk之前,目录已经存在(空或不存在),并使用GNU awk进行gensub()和nextfile以及内部文件管理。其他awks的解决方案效率较低,需要更多编码,并且当需要打开太多文件时,需要您管理关闭文件。