두 개의 텍스트 파일이 있는데 하나에는 다음과 같은 내용이 포함되어 있습니다.
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