2개의 파일을 확인하고 세 번째 파일을 작성해야 합니다.

2개의 파일을 확인하고 세 번째 파일을 작성해야 합니다.

File1 - Column1 데이터만, 다른 열은 헤더만.

Column1, column55, column56, column57, column58, column59, column60,column61, column62
123
124
221
225
333
432

파일 2:

Column1,Column2,Column3,Column4,…………column55, column59, column58, column54, column62, column61
xxx,123,yyy,zzz…….bbb,ccc,ddd,eee,fff,ggg,hhh,c:\a\b\c\ddd,ggg,hhh,c:\a\b\c\dsada,c:\a\b\c\kkja,c:\a\b\c\dsada,c:\a\b\c\kada
xxx,124,xxx,yyy………111,222,333,444,555,vvv,ddd,c:\a\b\c\uuu,ggg,hhh,c:\a\b\c\adada,c:\a\b\c\daa,c:\a\b\c\dsada,c:\a\b\c\kkjj
xxx,221,xxx,yyy………zzz,ddd,333,fff,ccc,ddd,333,c:\a\b\c\vvv,ggg,hhh,c:\a\b\c\dads,c:\a\b\c\adaa,c:\a\b\c\dsada,c:\a\b\c\kkjakjjsa
xxx,333,xxx,yyy………kkk,444,www,333,fff,223,323,c:\a\b\c\xxx,ggg,hhh,c:\a\b\c\dddjj,c:\a\b\c\adaad,c:\a\b\c\dsada,c:\a\b\c\kki2
xxx,787,xxx,yyy………zzz,ddd,333,fff,ccc,ddd,213,c:\a\b\c\yyy,ggg,hhh,c:\a\b\c\dddkf,c:\a\b\c\fasd,c:\a\b\c\dsada,c:\a\b\c\kku3
xxx,827,xxx,yyy………kkk,444,www,333,fff,sda,sda,c:\a\b\c\zzz,ggg,hhh,c:\a\b\c\ddyu,c:\a\b\c\fsssfs,c:\a\b\c\dsada,c:\a\b\c\k233

확인 작업 흐름은 다음과 같습니다.

  • 파일 1의 열 1 = 파일 2의 열 2인 경우. — 헤더와 데이터를 비교하고
    (file1.column55 = file2.column55. — 동일하면 헤더만 비교합니다.
    OR file1.column56 = file2.column56 — 동일하면 헤더만 비교합니다.
    OR file1.column57 = file2.column57 ) — 동일하면 헤더만 비교한
    다음 file1에서 file3.csv를 씁니다.

원하는 출력은 다음과 같아야 합니다. (file1 형식과 유사하지만 데이터는 다음과 같아야 함)

Column1 Column55 column57, column58  column59  column60 column61, column62

답변1

이 시도,

awk -F ',' 'FNR==NR {a[$1]; next} $2 in a{print $2", "$8}' file1 file2 | sed 's/,.*\\/, /g'

123, ddd
124, uuu
221, vvv
333, xxx
  • -F '[\\\\,]'예상되는 출력에 따라 두 개의 구분 기호(쉼표와 백슬래시)가 필요합니다. 백슬래시 동작을 방지하려면 4개의 백슬래시가 필요합니다.

답변2

또한 시도

awk -F ',' '
FNR == NR   {T[$1]
             next
            }
$2 in T     {n = split ($8, X, /\\/)
             print $2, X[n]
            }
' OFS=, file1 file2 
123,ddd
124,uuu
221,vvv
333,xxx

원하는 대로 필드 번호를 조정합니다(예: $8--> $55). 이것이 귀하의 요구 사항을 충족하지 못하는 경우 사양 및 샘플 데이터의 범위를 좁히거나 개선하십시오.

관련 정보