我有多个不同数据的文本文件,但标题和数据相同。底部的文本。我必须删除标题和尾部文本并将它们合并到一个输出文件中。任何一个速度适中的班轮都会很好。所有文件名都以名称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条线从顶部移除)
答案 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
只有页眉和页脚但没有其他行的文件不会产生任何输出。
如果您希望使用head
和tail
命令代替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开头的所有文件。