awk
2 파일 처리
수색…
두 파일의 일치하는 필드 확인
이 두 가지 CSV 파일을 보면 다음과 같습니다.
$ cat file1
1,line1
2,line2
3,line3
4,line4
$ cat file2
1,line3
2,line4
3,line5
4,line6
첫 번째 파일에서도 두 번째 열이 나타나는 file2 의 줄을 인쇄하려면 file2 과 file2 하면됩니다.
$ awk -F, 'FNR==NR {lines[$2]; next} $2 in lines' file1 file2
1,line3
2,line4
여기서 lines[] 는 각 행의 두 번째 필드 내용으로 file1 을 읽을 때 채워지는 배열을 유지합니다.
그런 다음 두 번째 필드가 배열에있는 경우 file2 모든 행에 대해 $2 in lines 체크의 조건 $2 in lines 검사합니다. 그렇다면, 조건은 참이고 awk 는 전체 행 인쇄로 구성된 기본 조치를 수행합니다.
인쇄 할 필드가 하나만 필요하다면 다음과 같은식이 될 수 있습니다.
$ awk -F, 'FNR==NR {lines[$2]; next} $2 in lines {print $1}' file1 file2
1
2
두 개의 파일을 읽을 때 awk 변수를 출력하십시오.
이 예제가 awk가 두 파일을 처리 할 때 NR, FNR 등 awk 내부 변수가 어떻게 변경되는지 이해하는 데 도움이되기를 바랍니다.
awk '{print "NR:",NR,"FNR:",FNR,"fname:",FILENAME,"Field1:",$1}' file1 file2
NR: 1 FNR: 1 fname: file1 Field1: f1d1
NR: 2 FNR: 2 fname: file1 Field1: f1d5
NR: 3 FNR: 3 fname: file1 Field1: f1d9
NR: 4 FNR: 1 fname: file2 Field1: f2d1
NR: 5 FNR: 2 fname: file2 Field1: f2d5
NR: 6 FNR: 3 fname: file2 Field1: f2d9
file1과 file2는 다음과 같습니다.
$ cat file1
f1d1 f1d2 f1d3 f1d4
$ cat file2
f2d1 f2d2 f2d3 f2d4
NR 값은 모든 파일에서 계속 증가하는 반면 FNR 은 각 파일에서 재설정됩니다. 이것은 첫 번째 파일에서만 NR 이 FNR 과 같을 수 있기 때문에 표현식 NR==FNR 항상 awk에 공급되는 첫 번째 파일을 참조하는 이유입니다.
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow