2014-01-14 146 views
0

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

例File1中:

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行)

+0

您显示的空白行是包括在内还是排除在外?数据是否包含空行?启动文件尾部的模式是否容易识别?它可能发生在文件的数据部分吗? –

+0

不,他们不包括在内。你可以写一个命令行样本,我可以根据需要进行调整,因为要省略多少。 – Muz

+0

对不起,但你应该表明你已经试图自己解决你的问题。考虑编辑你的问题,以包括你最好的尝试解决你的问题。祝你好运。 – shellter

回答

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 
0

使用农行的abc.txt而不是*。如果您使用ABC.txt,它将只处理该文件。如果您使用ABC *,它将处理所有以ABC开头的文件。

+0

我已经做了,它只是处理第一个文件的头部和最后一个的尾部。所有其他标题/尾巴我不想要在最后的组合文件。 – Muz