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

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

File1 — Column1 데이터만 다른 열에는 Header만 있습니다.

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

유효성 검사 작업 흐름은 다음과 같습니다.

  • file1의 컬럼1 = file2의 컬럼2인 경우. — 헤더와 데이터 비교
    And (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). 귀하의 요청이 만족스럽지 않은 경우 사양 및 샘플 데이터의 범위를 좁히거나 개선하십시오.

관련 정보