3개의 파일이 있습니다.
file1에는 다음과 같은 데이터가 있습니다.
A,B,C,D,E,F,G
1,2,3,4,5,6,7
7,6,5,4,3,2,1
file2에는 다음과 같은 데이터가 있습니다.
A,B,C,D,E,F,G
1,2,3,4,5,5,7
7,6,6,4,3,2,1
file3에는 A라는 필드가 하나만 있습니다.
A
1
2
7
이제 file3에서 사용할 수 있는 A열의 file1과 file2를 비교하고 싶습니다.
열 헤더와 열 수는 두 파일에서 동일합니다.
원하는 출력
Item FILE1 FILE2
1 F=6 F=5
7 C=5 C=6
더 많은 열이 일치하지 않는 경우
A,B,C,D,E,F,G
1,2,3,4,5,5,7
7,6,5,2,3,2,1
A,B,C,D,E,F,G
1,2,3,1,4,6,7
7,6,6,4,3,2,1
그러면 출력은 다음과 같아야합니다
Item FILE1 FILE2
1 D=4 D=1
E=5 E=4
F=5 F=6
7 C=5 C=6
D=2 D=4
이는 예입니다. 열 수는 다양할 수 있지만 File1과 File2에서는 항상 동일합니다. 그러므로 이전 질문과 다릅니다.
답변1
#!/bin/bash
join -t, file_1 file_2 | join -t, - file_3 |
awk -F, '
NR == 1 {
fields_num = (NF + 1) / 2
for(i = 1; i <= fields_num; i++)
field_names[i] = $i
}
NR != 1 {
item = $1 "\t"
for(i = 2; i <= fields_num; i++) {
cmp_num = i + fields_num - 1
if($i != $cmp_num) {
printf "%s%s=%s\t%s=%s\n",
item,
field_names[i], $i,
field_names[i], $cmp_num
item = "\t"
}
}
}'
몇 가지 가정을 했습니다.
- 비교에 사용되는 열이 항상 첫 번째입니다.
- 모든 파일은
A
첫 번째 열(필드)을 기준으로 정렬됩니다. file_1
두 파일(and)에 나타나는 항목 만 비교하십시오 .file_2
따라서file_1
item 이 있지만2
없으면file_2
해당 행은 비교에서 제외됩니다.
입력하다
tail -n +1 -- file_*
==> file_1 <==
A,B,C,D,E,F,G
1,2,3,4,5,5,7
7,6,5,2,3,2,1
==> file_2 <==
A,B,C,D,E,F,G
1,2,3,1,4,6,7
7,6,6,4,3,2,1
==> file_3 <==
A
1
2
7
산출
1 D=4 D=1
E=5 E=4
F=5 F=6
7 C=5 C=6
D=2 D=4