在其他文件中查找与打印匹配的值

时间:2019-02-18 16:58:07

标签: awk

在以下情况下。我想找到与以下内容匹配的值:file1:第5和6列与file2:第1列

如果两个文件中的值完全相同,则按照所需的输出文件进行打印

文件1

31429,36689,313212.5,2334362.5,30001,35825,31308,302412.50 2316512.50
31429,36701,313362.5,2334362.5,31429,36681,31311,2334363,31429
31429,36713,313512.5,2334362.5,31429,36719,31358,303312.50 2316512.50
31429,36749,313962.5,2334362.5,31429,36751,31398,2334362,31429
31429,36809,314712.5,2334362.5,31429,36803,31463,2334361,31429
31429,36821,314862.5,2334362.5,30001,35945,31481,2334363,31429

文件2

3000135825 302412.50 2316512.50
3000135837 302562.50 2316512.50
3000135849 302712.50 2316512.50
3000135861 302862.50 2316512.50
3000135873 303012.50 2316512.50
3000135885 303162.50 2316512.50
3000135897 303312.50 2316512.50
3000135909 303462.50 2316512.50
3000135921 303612.50 2316512.50
3000135933 303762.50 2316512.50
3000135945 303912.50 2316512.50

所需的输出

3000135825 302412.50 2316512.50 30001 35825
3000135945 303912.50 2316512.50 30001 35945

我尝试过

awk '
FNR==NR{
  a[$5 OFS $6]=$5 $6
  next
}
(($1) in a){
  print $0,a[$1]
}
' FS="[, ]"  file1 FS=" "  file2

2 个答案:

答案 0 :(得分:2)

这种单线可能会有所帮助:

awk -F'[, ]' 'NR==FNR{a[$1]=$0;next}$5$6 in a{print a[$5$6],$5,$6}' f2 f1

答案 1 :(得分:1)

执行此操作的简单方法是:

awk -F, 'NR==FNR{a[$5 $6]=$5;b[$5 $6]=$6;next;} $1 in a{print $0,a[$1],b[$1]}' file1 FS=' ' file2
3000135825 302412.50 2316512.50 30001 35825
3000135945 303912.50 2316512.50 30001 35945

或者避免第二次设置FS

awk -F'[, ]' 'NR==FNR{a[$5 $6]=$5;b[$5 $6]=$6;next;} $1 in a{print $0,a[$1],b[$1]}' file1 file2