2014-01-14 188 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