[英]awk Compare 7 files, print match and difference based on Fileds:
I need to comapre 7 files Ref.txt and Jan.txt to Jun.txt and obtain matches, and non-matches, for this case I am looking to check Second field of Ref.txt with all the First field of Jan.txt to Jun.txt,if yes then print all the fileds of Ref.txt (Master dump), then print the entire line of Jan.txt to Jun.txt. 我需要将Ref.txt和Jan.txt的7个文件comapre转换为Jun.txt并获取匹配项和不匹配项,在这种情况下,我希望将Ref.txt的Second字段与Jan.txt的所有First字段一起检查Jun.txt,如果是,则打印Ref.txt(主转储)的所有文件,然后将Jan.txt的整个行打印到Jun.txt。 And for no match found on Jan.txt to Jun.txt to state "NotFound" . 并且在Jan.txt上找不到与Jun.txt匹配的状态“ NotFound”。
Ref.txt 参考文件
abc 10 xxyyzz
bdc 20 xxyyzz
edf 30 xxyyzz
ghi 40 xxyyzz
ofg 50 xxyyzz
mgf 60 xxyyzz
Jan.txt Jan.txt
10 Jan 100
30 Jan 300
50 Jan 500
Feb.txt 2月txt
10 Feb 200
20 Feb 400
40 Feb 800
60 Feb 1200
Mar.txt Mar.txt
20 Mar 600
50 Mar 1500
Apr.txt 四月
10 Apr 100
30 Apr 300
50 Apr 500
May.txt May.txt
10 May 200
20 May 400
40 May 800
60 May 1200
Jun.txt Jun.txt
20 Jun 600
50 Jun 1500
Desired Output: 所需输出:
Ref.txt Ref.txt Ref.txt Jan.txt Jan.txt Jan.txt Feb.txt Feb.txt Feb.txt Mar.txt Mar.txt Mar.txt Apr.txt Apr.txt Apr.txt May.txt May.txt May.txt Jun.txt Jun.txt Jun.txt
abc 10 xxyyzz 10 Jan 100 10 Feb 200 Notfound Notfound Notfound 10 Apr 100 10 May 200 Notfound Notfound Notfound
bdc 20 xxyyzz Notfound Notfound Notfound 20 Feb 400 20 Mar 600 Notfound Notfound Notfound 20 May 400 20 Jun 600
edf 30 xxyyzz 30 Jan 300 Notfound Notfound Notfound Notfound Notfound Notfound 30 Apr 300 Notfound Notfound Notfound Notfound Notfound Notfound
ghi 40 xxyyzz Notfound Notfound Notfound 40 Feb 800 Notfound Notfound Notfound Notfound Notfound Notfound 40 May 800 Notfound Notfound Notfound
ofg 50 xxyyzz 50 Jan 500 Notfound Notfound Notfound 50 Mar 1500 50 Apr 500 Notfound Notfound Notfound 50 Jun 1500
mgf 60 xxyyzz Notfound Notfound Notfound 60 Feb 1200 Notfound Notfound Notfound Notfound Notfound Notfound 60 May 1200 Notfound Notfound Notfound
Thanks in advance for your reply 预先感谢您的答复
Here's a gift: please ask questions for stuff you don't understand 这是礼物:请问一些您不了解的问题
awk '
FNR == 1 {
printf "%s %s %s\t", FILENAME, FILENAME, FILENAME
if (NR > FNR) file[++num_files] = FILENAME
}
NR == FNR {
id[NR] = $2
ref[NR] = $0
num_ids++
next
}
{ value[FILENAME,$1] = $0 }
END {
print ""
for (row=1; row<=num_ids; row++) {
printf "%s\t", ref[row]
for (f=1; f<=num_files; f++) {
key = file[f] SUBSEP id[row]
printf "%s\t", (key in value ? value[key] : "Notfound")
}
print ""
}
}
' {Ref,Jan,Feb,Mar,Apr,May,Jun}.txt
Ref.txt Ref.txt Ref.txt Jan.txt Jan.txt Jan.txt Feb.txt Feb.txt Feb.txt Mar.txt Mar.txt Mar.txt Apr.txt Apr.txt Apr.txt May.txt May.txt May.txt Jun.txt Jun.txt Jun.txt
abc 10 xxyyzz 10 Jan 100 10 Feb 200 Notfound 10 Apr 100 10 May 200 Notfound
bdc 20 xxyyzz Notfound 20 Feb 400 20 Mar 600 Notfound 20 May 400 20 Jun 600
edf 30 xxyyzz 30 Jan 300 Notfound Notfound 30 Apr 300 Notfound Notfound
ghi 40 xxyyzz Notfound 40 Feb 800 Notfound Notfound 40 May 800 Notfound
ofg 50 xxyyzz 50 Jan 500 Notfound 50 Mar 1500 50 Apr 500 Notfound 50 Jun 1500
mgf 60 xxyyzz Notfound 60 Feb 1200 Notfound Notfound 60 May 1200 Notfound
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.