파일 1의 값이 파일 2의 값과 일치하지 않으면 awk는 인쇄하지 않습니다.

파일 1의 값이 파일 2의 값과 일치하지 않으면 awk는 인쇄하지 않습니다.

파일 1:

G A 4
H B 3
I C 2
J D 1

파일 2:

M H 6
N H 5
O K 4
P J 3
Q I 2
R I 1
S G 0
T L 1

예상하다:

M H 6
N H 5
P J 3
Q I 2
R I 1
S G 0

file2의 $2가 file1의 $1과 일치하는 행만 인쇄합니다.

if 문을 생성하려고 하는데 다음 구문 오류가 발생합니다.

awk 'NR==FNR{a[NR]=$1; b[NR]=$2; next} ; {if{a[FNR]==b[FNR]}; {next}; { print }' file1 file2

syntax error at source line 1
 context is
    NR==FNR{a[NR]=$1; b[NR]=$2; next} ; >>>  if <<< {a[FNR]==b[FNR]; next}; { print }

또는 if 동사를 사용하지 않으면 출력이 없습니다.

awk 'NR==FNR{a[NR]=$1; b[NR]=$2; next} ; {a[FNR]==b[FNR]; next}; { print }' file1 file2

답변1

코드가 지나치게 복잡합니다. 이 시도:

$ awk 'NR==FNR{a[$1]; next} $2 in a' file1 file2
M H 6
N H 5
P J 3
Q I 2
R I 1
S G 0

설명하다:

  1. NR==FNR해당 파일의 총 레코드 수가 파일 레코드 수와 동일하기 때문에 필터는 file1의 행만 필터링합니다.

  2. 첫 번째 파일 줄의 경우 첫 번째 필드( )를 배열 $1의 키로 추가한 다음 나머지 명령을 건너뜁니다.aa[$1]next

  3. next첫 번째 파일의 모든 줄에 적용되는 첫 번째 블록을 호출했으므로 두 번째 필터는 $2 in a두 번째 파일의 줄에만 적용되었습니다.

  4. 필터는 $2 in a두 번째 단어가 $2배열의 키인지 확인합니다 a. 키가 있으면 현재 줄을 인쇄하는 기본 작업이 수행됩니다.

답변2

#!/usr/bin/python
k=open('f1','r')
for file1 in k:
    file1_split=file1.split(' ')
    m=open('f2','r')
    for file2 in m:
        file2_split=file2.split(' ')
        if (file1_split[0].strip() == file2_split[1].strip()):
            print file2.strip()
~                              

산출

M H 6
N H 5
P J 3
Q I 2
R I 1
S G 0

먼저 file1을 열고 한 줄씩 읽습니다. 그런 다음 file2를 열고 file1의 첫 번째 열 1의 각 줄이 file2의 열 2 줄과 일치하는지 확인합니다. 일치하는 항목이 있으면 file2의 일치하는 줄을 인쇄하고 file1과 file2의 다음 줄을 계속 인쇄합니다.

관련 정보