Unix 파일 일치 논리

Unix 파일 일치 논리

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

레코드가 일치하면 파일 1의 전체 레코드를 새 파일 3에 써야 하고, 일치하지 않으면 동일한 레코드를 오류 파일(파일 4)에 써야 합니다. 파일 1과 파일 2에는 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로 리디렉션합니다.

관련 정보