파일 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
설명하다:
NR==FNR
해당 파일의 총 레코드 수가 파일 레코드 수와 동일하기 때문에 필터는 file1의 행만 필터링합니다.첫 번째 파일 줄의 경우 첫 번째 필드( )를 배열
$1
의 키로 추가한 다음 나머지 명령을 건너뜁니다.a
a[$1]
next
next
첫 번째 파일의 모든 줄에 적용되는 첫 번째 블록을 호출했으므로 두 번째 필터는$2 in a
두 번째 파일의 줄에만 적용되었습니다.필터는
$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의 다음 줄을 계속 인쇄합니다.