태그를 기반으로 텍스트 파일에서 전체 줄을 제거합니다.

태그를 기반으로 텍스트 파일에서 전체 줄을 제거합니다.

예: 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 등과 같은 태그를 기반으로 전체 줄을 제거해야 합니다.

4개의 파일에서 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.txt.02.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

*.txt여기에서 찾고 있는 순서대로 쉘이 확장된 것을 볼 수 있습니다 .

답변2

다음을 사용하여 이 줄을 삭제하고 모든 것을 병합할 수 있습니다.

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

HDR이는 삭제해야 하는 행의 첫 번째 항목이 또는 이라고 가정합니다 TLR.

관련 정보