2개의 탭으로 구분된 파일을 비교하고 파일에 기본 키가 없고 열 헤더가 있는 출력을 비교하려고 합니다.
나는 그것에 매우 가깝지만 내가 직면한 문제는 내가 만진 코드 조각이 기본 키가 있는 경우에만 작동한다는 것입니다.
awk '
NR==1 {
for (i=1; i<=NF; i++)
header[i] = $i
}
NR==FNR {
for (i=1; i<=NF; i++) {
A[i,NR] = $i
}
next
}
{
for (i=1; i<=NF; i++)
if (A[i,FNR] != $i)
print "ID#-" $1 ": " header[i] "- " ARGV[1] " value= ", A[i,FNR]" / " ARGV[2] " value= "$i
}' t1.csv t2.csv
누구든지 구현 방법을 도와 줄 수 있습니까?
- 기본 키가 없을 때
- 행 수가 동일하지 않고 한 파일에 기록이 누락된 경우
t1.csv
Month ClientSegment ClientType IssuerClientSegment NetworkID VD
2020-12 COMMUNITY EXEMPT COMMUNITY 0 OTHER
2020-12 COMMUNITY EXEMPT COMMUNITY 2 OTHER
2020-12 COMMUNITY EXEMPT COMMUNITY 5 OTHER
t2.csv
Month ClientSegment ClientType IssuerClientSegment NetworkID VD
2020-12 COMMUNITY EXEMPT COMMUNITY 0 OTHER
2020-12 COMMUNITY EXEMPT COMMUNITY 2 OTHER1
2020-13 COMMUNITY EXEMPT COMMUNITY 2 PUSH
2020-13 COMMUNITY EXEMPT COMMUNITY 3 OTHER
예상 출력은 다음과 같습니다.
Row 2, Column: VD- t1.csv value= OTHER / t2.csv value= OTHER1
Missing in t2.csv
Month Client Segment Client Type Issuer Client Segment Network ID VD
2020-12 COMMUNITY EXEMPT COMMUNITY 5 OTHER
Missing in t1.csv
Month Client Segment Client Type Issuer Client Segment Network ID VD
2020-13 COMMUNITY EXEMPT COMMUNITY 2 PUSH
2020-13 COMMUNITY EXEMPT COMMUNITY 3 OTHER
답변1
사용daff
:
daff --input-format tsv t1.csv t2.csv
@@ Month ClientSegment ClientType IssuerClientSegment NetworkID VD
2020-12 COMMUNITY EXEMPT COMMUNITY 0 OTHER
→ 2020-12 COMMUNITY EXEMPT COMMUNITY 2 OTHER→OTHER1
+++ 2020-13 COMMUNITY EXEMPT COMMUNITY 2 PUSH
+++ 2020-13 COMMUNITY EXEMPT COMMUNITY 3 OTHER
--- 2020-12 COMMUNITY EXEMPT COMMUNITY 5 OTHER
install을 사용하세요 pip install daff
(이것이 필요할 수도 있습니다 sudo apt install python-pip
).
답변2
awk '
{ key = $1 OFS $2 OFS $3 OFS $4 OFS $5 }
! secondInput {
file1[key] = $6
NRfile1[key] = NR
next
}
(key in file1) {
if (file1[key] != $NF) { print "diff-line#:", NRfile1[key] "|" FNR, $0 }
delete file1[key]
next
}
{ print "missing in file1: ", $0 }
END {
for (key in file1) {
print "missing in file2: ", key, file1[key]
}
}' file1 secondInput=1 file2
산출:
diff-line#: 3|3 2020-12 COMMUNITY EXEMPT COMMUNITY 2 OTHER1
missing in file1: 2020-13 COMMUNITY EXEMPT COMMUNITY 2 PUSH
missing in file1: 2020-13 COMMUNITY EXEMPT COMMUNITY 3 OTHER
missing in file2: 2020-12 COMMUNITY EXEMPT COMMUNITY 5 OTHER