두 파일의 문자열을 비교하는 방법

두 파일의 문자열을 비교하는 방법

두 개의 텍스트 파일이 있는데 하나에는 다음과 같은 내용이 포함되어 있습니다.

Id         Value
1         apple   
2         orange  
3         mango 
4         banana 
5         strawberry
6         papaya

다른 파일에도 비슷한 항목이 있습니다

Id        Value
6         strawberry 
4         banana
3         orange  
1         mango
2         papaya
5         straw berry

값 열의 ID와 해당 문자열을 일치시키고 문자열의 정확성을 찾아야 합니다. 이것이 어떻게 달성될 수 있습니까?

답변1

각 파일에 항상 동일한 수의 항목이 있고 각 ID가 다른 파일의 동일한 ID와 연결될 수 있는 경우 다음을 수행할 수 있습니다(이것은 개념 증명이므로 개선해야 합니다).

$ join -j1 <(sort -n file1.txt) <(sort -n file2.txt) | 
    awk '{if($2!=$3){k="==> BUG"}else {k=" ==> OK"}print $0,k}'

Id Value Value ==> OK
1 apple  mango ==> BUG
2 orange  papaya ==> BUG
3 mango  orange  ==> BUG
4 banana  banana ==> OK
5 strawberry straw berry ==> BUG
6 papaya strawberry  ==> BUG

예를 들어, ID #4가 두 번째 파일에 없으면 "있는 그대로" 작동하지 않습니다.

헤더를 제거하고 BUG행만 유지해야 합니다.

$ join -j1 <(sort -n file1.txt | tail -n+2) <(sort -n file2.txt | tail -n+2) | 
    awk '($2!=$3){print $0," ==> BUG"}'

답변2

awk사전 정렬이나 외부 도구 없이 간단한 솔루션은 다음과 같습니다.

awk '
  FNR==1 { next }
  NR==FNR { a[$1] = $2 ; next }
  a[$1] != $2 { print $1, ":", $2, "does not match", a[$1] }
' file1 file2

데이터 출력:

6 : strawberry does not match papaya
3 : orange does not match mango
1 : mango does not match apple
2 : papaya does not match orange
5 : straw does not match strawberry

관련 정보