awk - 각각 두 개의 연속 라인에 걸쳐 있는 여러 문자열 일치 조건

awk - 각각 두 개의 연속 라인에 걸쳐 있는 여러 문자열 일치 조건

나는 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

관련 정보