【问题标题】:Compare two files with awk - check if values from two columns in file1 are included somewhere in two columns in file2使用 awk 比较两个文件 - 检查 file1 中两列的值是否包含在 file2 的两列中
【发布时间】:2017-10-31 10:19:21
【问题描述】:

我想检查(每一行)来自 file1 的值(在 $2 && $3 列中)是否包含在 file2 中的某个位置(在 $1 && $2 列中)。如果是,那么我想从 file1 打印 $1、$2、$3 以及从 file2 打印 $3(作为第 4 列)。

文件1:

@ 139.51 -62.48
@ 137.36 -63.36
@ 135.44 -64.09

文件2:

137.35 -63.36 6.349
137.36 -63.36 6.348
137.37 -63.36 6.346

到目前为止:

awk 'NR == FNR {a[$1$2];c[FNR] =$3;next} $2$3 in a {print $1, $2, $3, c[FNR]}' $file2 $file1 > $output 

但不知何故,$4 中的结果值不等于 file2 的第 3 列。有人可以帮我吗?非常感谢! :)

我是编程新手,到目前为止我一直在使用 awk 和 shell,所以我总是对解释感到高兴!谢谢!

【问题讨论】:

  • 预期输出是什么?
  • 这种情况下的预期输出应该是:@ 137.36 -63.36 6.348
  • @IsiSa,那我想你得到了答案,贴在下面:) 享受学习的乐趣。请务必在代码标签中发布您的预期输出,以方便人们使用。
  • @RavinderSingh13,非常感谢!这真的帮了我很多!感谢您的注意 - 这是我的第二个问题,所以还不太习惯 :)
  • @IsiSa,没问题,看到这个stackoverflow.com/help/someone-answers,继续在这里学习和分享知识。

标签: bash shell awk


【解决方案1】:

由于您没有显示预期的输出,因此根据您的陈述仅编写此代码。

awk 'FNR==NR{a[$2,$3]=$0;next} (($1,$2) in a){print a[$1,$2],$NF}' fiLE1  fiLE2

输出如下。

@ 137.36 -63.36 6.348

【讨论】:

  • 非常好的答案 ++(我本来打算发布相同的,但正在等待 OP 对预期输出的响应)
  • @anubhava,感谢 anubhava 先生的鼓励,它总是让我振奋 :)
猜你喜欢
  • 2020-06-01
  • 2015-02-22
  • 1970-01-01
  • 2020-03-24
  • 1970-01-01
  • 1970-01-01
  • 2015-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多