繁体   English   中英

awk比较2个文件,打印匹配行和不匹配行;第一个文件的第三列和第二个文件的第二列

[英]awk compare 2 files, print match and nonmatch lines;3rd column of first file and 2nd column of second file

在此示例中,需要比较两个文件f1.txt和f2.txt并获得匹配项和不匹配项,在这种情况下,我希望匹配第二个文件的第二列和第一个文件的第三列。 并首先打印f2.txt的第二个字段,然后打印f1.txt的整行。 并且在f2.txt上找不到匹配项以声明“未找到”,然后打印f1.txt整行。

F1.txt

2;3;1;4;5;6;7;8
2;3;1a;4;5;6;7;8
2;3;1b;4;5;6;7;8
2;3;2b;4;5;6;7;8

F2.txt

First;1
Firsta;1a
Firstb;1b

所需输出:

First;1;2;3;1;4;5;6;7;8
Firsta;1a;2;3;1a;4;5;6;7;8
Firstb;1b;2;3;1b;4;5;6;7;8
Not Found;Not Found;2;3;2b;4;5;6;7;8

这可以是一种方法:

awk 'BEGIN{FS=OFS=";"}
     FNR==NR {a[$2]=$0; next}
     { t=($3 in a)?a[$3]:"Not found"OFS"Not found"; print t,$0}' f2 f1

它返回:

$ awk 'BEGIN{FS=OFS=";"}FNR==NR {a[$2]=$0; next} { t=($3 in a)?a[$3]:"Not found"OFS"Not found"; print t,$0}' f2 f1
First;1;2;3;1;4;5;6;7;8
Firsta;1a;2;3;1a;4;5;6;7;8
Firstb;1b;2;3;1b;4;5;6;7;8
Not found;Not found;2;3;2b;4;5;6;7;8

说明

基本上是从http://backreference.org/2010/02/10/idiomatic-awk/获取的 唯一可以解释的方面是:

  • t=($3 in a)?a[$3]:"Not found"OFS"Not found" 它是三元运算符var= check_condition ? value_if_true : value_otherwise var= check_condition ? value_if_true : value_otherwise 如果值在第二个文件中,则t包含我们需要的行; 否则,它包含“未找到”值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM