根据标签删除文本文件中的完整行

根据标签删除文本文件中的完整行

例如:01.txt、02.txt、03.txt 和 04.txt 具有以下值。

HDR|A|B|C|D|F|||||||
DTL|1|2|3|4|5|||||||||||
DTL|5|6|7|8|9|||||||||||
TLR|A|B|C|D|F|||||||

我必须根据 HDR、TLR 等标签删除完整的线条。

从四个文件中删除 HDR 和 TLR 行后,它应该合并为单个文件。

我们应该以这种方式合并,在删除 HDR、TLR 行后应保持文件顺序。(01_latest.txt、02_latest_txt、03_latest.txt 和 04_latest.txt)

在UNIX下怎样才能实现脚本呢?

答案1

您也可以使用以下命令删除这些行grep

$ grep -vE "HDR|TLR" *.txt > merged.txt

这将跳过任何包含“HDR”或“TLR”的行。这|是一个 or 运算符,因此您也可以根据需要扩展它,例如“STR1|STR2|STR3”。只要名称一致,就可以保证循环遍历文件01.txt02.txt

您可以通过以下示例来说服自己这一点。

$ ls -1
01.txt
02.txt
03.txt
04.txt
05.txt
06.txt
07.txt
08.txt
09.txt
11.txt
12.txt
13.txt
14.txt
15.txt
16.txt
17.txt
18.txt
19.txt

$ echo *.txt
01.txt 02.txt 03.txt 04.txt 05.txt 06.txt 07.txt 08.txt 09.txt 11.txt 12.txt 13.txt 14.txt 15.txt 16.txt 17.txt 18.txt 19.txt

在这里您可以看到 shell*.txt按照您要查找的顺序展开。

答案2

您可以删除这些行并使用合并所有内容

sed '/^\(HDR\|TLR\)|/d' [0-9]*.txt > merged.txt

这里假设应删除的行的第一个条目恰好是HDRor TLR

相关内容