한 줄의 값이 다른 값 바로 뒤에 오는 경우에만 파일로 인쇄합니다. bash

한 줄의 값이 다른 값 바로 뒤에 오는 경우에만 파일로 인쇄합니다. bash

다양한 임의의 명령문이 포함된 파일(xyz.dat)이 있습니다. 내가 해야 할 일은 해당 파일에서 한 줄을 검색 VALUE1하고 VALUE1그 바로 뒤에 나오는 새 줄만 파일에 인쇄하는 것입니다 VALUE2.

입력 예:

1 VALUE1
2 VALUE1
3 VALUE1
4 VALUE2
5 VALUE1
6 VALUE2
7 VALUE2

예상 출력:

3 VALUE1
4 VALUE2
5 VALUE1
6 VALUE2

답변1

단순한sed방법:

sed -n '/ VALUE1$/{ N; / VALUE2$/p }' xyz.dat > new.txt

new.txt콘텐츠:

3 VALUE1
4 VALUE2
5 VALUE1
6 VALUE2

답변2

sed와 함께

sed '/ VALUE1$/!d;N;/ VALUE2$/b;D' infile

답변3

또 다른 awk방법:

awk '/VALUE1/{ bkup=$0 } /VALUE2/ && bkup{print bkup ORS $0; bkup=""}' infile

답변4

Awk해결책:

-- 기능 기준 getline:

awk '/ VALUE1$/ && (getline nl) > 0 && nl ~ /VALUE2$/{ print $0 ORS nl }' xyz.dat

-- 레코드 수에 따른 비교:

awk '/ VALUE1$/{ rec = $0; rn = NR+1 }NR == rn && /VALUE2$/{ print rec ORS $0 }' xyz.dat

출력(둘 다):

3 VALUE1
4 VALUE2
5 VALUE1
6 VALUE2

관련 정보