Remover linha completa em arquivos de texto baseados em tags

1

Por exemplo: 01.txt, 02.txt, 03.txt e 04.txt tem os seguintes valores.

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

Eu tenho que remover linhas completas com base em tags como HDR, TLR.

Quando as linhas HDR e TLR forem removidas de quatro arquivos, ela deverá ser mesclada em um único arquivo.

devemos mesclar de tal forma, deve manter os pedidos de arquivos após a remoção de linhas HDR, TLR. (01_latest.txt, 02_latest_txt, 03_latest.txt e 04_latest.txt)

Como podemos alcançar o Script UNIX?

    
por UNIXbest 12.08.2013 / 18:26

2 respostas

2

Você pode remover essas linhas usando grep também:

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

Isso irá pular todas as linhas que contiverem um "HDR" ou "TLR". O | é um operador ou para que você possa expandi-lo conforme necessário também, "STR1 | STR2 | STR3", por exemplo. Looping através dos arquivos é garantido, desde que os nomes sejam consistentemente 01.txt , 02.txt , etc.

Você pode se convencer disso com o exemplo a seguir.

$ 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

Aqui você pode ver que o shell expandiu *.txt na ordem sequencial que você está procurando.

    
por 12.08.2013 / 21:27
1

Você pode remover essas linhas e mesclar tudo usando

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

Aqui é assumido que a primeira entrada da linha que deve ser removida é exatamente HDR ou TLR .

    
por 12.08.2013 / 18:42