다양한 임의의 명령문이 포함된 파일(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