从多个文本文件的头部和尾部删除行并合并

时间:2014-01-14 22:07:02

标签: unix merge head tail cat

我有多个不同数据的文本文件,但标题和数据相同。底部的文本。我必须删除标题和尾部文本并将它们合并到一个输出文件中。任何一个速度适中的班轮都会很好。所有文件名都以名称ABC开头,并且位于同一目录中。

示例文件1:

This is a sample header
This is Not required
I have to remove this data

....... DATA of file 1 .........

This is sample tail 
It needs to be removed

示例文件2:

This is a sample header
This is Not required
I have to remove this data

....... DATA of file 2 .........

This is sample tail 
It needs to be removed

我正在使用

head -n -12 ABC.txt | tail -n +20 > output.txt 

但它只处理1个文件。 (12条线从底部移除,20条线从顶部移除)

2 个答案:

答案 0 :(得分:2)

假设所有文件都有一个20行标题和12行页脚,你可以使用sed从第13行到最后一行提取第21行:

for file in ABC*; do
    numlines=$(cat $file | wc -l)
    lastline=$(( $numlines - 12 ))
    (( 21 <= $lastline )) && sed "21,$lastline \!D" $file >> combined.txt
done

只有页眉和页脚但没有其他行的文件不会产生任何输出。 如果您希望使用headtail命令代替sed

for file in ABC*; do
    numlines=$(cat $file | wc -l)
    (( 32 < $numlines )) && head -n -12 $file | tail -n +20 >> combined.txt
done

答案 1 :(得分:0)

使用ABC *代替ABC.txt。如果您使用ABC.txt,它将只处理该文件。如果您使用ABC *,它将处理以ABC开头的所有文件。