Unix 파일 일치 논리

Unix 파일 일치 논리

file1을 위에서 아래로 읽고 그 열 2를 file2의 열 3과 일치시켜야 하는 프로젝트 요구 사항이 있습니다. 두 파일 모두 탭으로 구분됩니다.

레코드가 일치하면 파일 1의 전체 레코드를 새 파일 3에 써야 하고, 일치하지 않으면 동일한 레코드를 오류 파일(file4)에 써야 합니다. File1과 file2에는 500-510개의 레코드가 포함되어 있습니다. 처음부터 file1 읽기를 시작하고 file2의 열 3에서 열 2의 값을 찾아야 합니다(필요한 경우 위에서 아래로 전체 스캔).

파일1

ZZA 01  LIST18
ZZY 02  LIST38
UTW 80  LIST100
OOP 11  LIST56

파일2

A1  21138   99999   LIST18
W1  20223   99999   LIST44
Z9  20355   99999   LIST56
O9  21002   21154   LIST11

파일3

ZZA 01  LIST18
OOP 11  LIST56

파일4

ZZY 02  LIST38
UTW 80  LIST100

답변1

file1의 열 3을 file2의 열 4와 일치시키려는 경우 다음을 사용할 수 있습니다 awk.

awk -F'\t' '
  NR==FNR{ arr[$4]; next }
  { print > (($3 in arr) ? "file3" : "file4") }
' file2 file1

이는 file2를 먼저 읽고 배열의 네 번째 필드를 arr인덱스로 저장합니다.
그런 다음 file1과 print각 레코드를 읽습니다. 세 번째 필드가 배열에 있으면 출력을 file3으로 리디렉션하고, 그렇지 않으면 file4로 리디렉션합니다.

관련 정보