다음과 같은 파일이 있습니다.
apple 1
apple 2
mango 3
apple 2
mango 4
mango 5
apple 3
apple 4
cherry 6
cherry 7
cherry 8
apple 5
cherry 9
apple
한 줄에 awk 또는 sed를 사용하여 두 번째 줄을 유지하는 패턴과 일치하는 연속 줄을 삭제하고 싶습니다 . 또한 패턴과 일치하지 않는 나머지 줄을 유지하고 다음과 같은 출력을 얻고 싶습니다.
apple 2
mango 3
apple 2
mango 4
mango 5
apple 4
cherry 6
cherry 7
cherry 8
apple 5
cherry 9
답변1
awk 스크립트에 대한 추가 최적화:
awk '$1=="apple"{l=$0;next}l{print l; l=""}1' file
이는 l
패턴과 일치하는 행을 변수에 저장하는 데 의존합니다 apple
. 저장된 라인은 패턴을 찾을 수 없는 경우에만 인쇄됩니다.
답변2
몇 번의 시행착오 끝에 다음과 같은 답을 얻었습니다.
awk '{a=$1;b=$2;row1=NR;getline;row2=NR;c=$1;d=$2;if(row1==row2 || (a=="apple" && c=="apple")) {print c " " d;} else {print a " " b;print c " " d;}}' FILE
결과는 다음과 같습니다.
apple 2
mango 3
apple 2
mango 4
mango 5
apple 4
cherry 6
cherry 7
cherry 8
apple 5
cherry 9