
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로 리디렉션합니다.