![awk - 각각 두 개의 연속 라인에 걸쳐 있는 여러 문자열 일치 조건](https://linux55.com/image/175429/awk%20-%20%EA%B0%81%EA%B0%81%20%EB%91%90%20%EA%B0%9C%EC%9D%98%20%EC%97%B0%EC%86%8D%20%EB%9D%BC%EC%9D%B8%EC%97%90%20%EA%B1%B8%EC%B3%90%20%EC%9E%88%EB%8A%94%20%EC%97%AC%EB%9F%AC%20%EB%AC%B8%EC%9E%90%EC%97%B4%20%EC%9D%BC%EC%B9%98%20%EC%A1%B0%EA%B1%B4.png)
나는 awk
다음과 같은 간단한 한 줄의 변형을 개발하려고 합니다(현재 파일의 각 줄에서 여러 조건을 일치시키는 데 작동합니다).
awk "{ if ($1 == $3 && $2 == $7) print $1,$2}" input.txt > out.txt
필요한 변경 사항은 단일 행 대신 연속된 두 행의 모든 인스턴스를 살펴보는 것입니다. 따라서 첫 번째 행이 A이고 두 번째 행이 B인 경우 다음과 같습니다.
awk "{ if (A$1 == B$3 && A$2 == B$7) print A$1,B$1,A$2,B$2}" input.txt > out.txt
그런 것! 입력 파일의 예는 다음과 같습니다.
banana apple orange pumpkin potato tomato onion garlic
banana apple banana pumpkin potato tomato onion garlic
lemon grape banana pumpkin potato tomato apple garlic
banana apple orange pumpkin potato tomato onion garlic
2행과 3행을 일치시키고 다음을 출력합니다.
banana lemon apple grape
나는 이것을 할 수 있다고 확신하며 awk
여기에서 관련 질문과 답변에서 필요하다고 생각하는 구성 요소를 보았지만 실제로는 제대로 컴파일할 기술이 없습니다.
답변1
이전 행의 필드를 배열에 저장 a
하고 접두어가 Normal 인 현재 행의 필드에 액세스할 수 있습니다 $
.
awk '
a[1]==$3 && a[2]==$7{ print a[1],$1,a[2],$2 }
{ for (i=1;i<=NF;i++) a[i]=$i }
' input.txt > out.txt