【问题标题】:Compare 2 files with awk and substract value from one column if the value of another column matches in both files如果另一列的值在两个文件中匹配,则将 2 个文件与 awk 进行比较并从一列中减去值
【发布时间】:2020-04-07 05:00:14
【问题描述】:

我正在尝试与 Ubuntu 系统上的文件进行比较。两个文件具有相同的两列结构,如果第二列的值与给定行匹配,则减去同一行的列 1 的值。

我已经尝试了几件事,我得到的最接近的是这个命令:

awk 'NR==FNR{a[$1]=$1;b[$2]=$2;next} {if ($2 in b) print $1-a[$1]," ",$2}' file1 file 2

但我想我有问题,因为结果似乎只承认满足第二列匹配条件的行,但只允许第一列具有相同值的行。

例如:

文件 1:

10 A
20 B
30 C
10 D

文件2:

10 A
20 E
20 F
50 D

应该返回:

0 A
-40 D

返回:

0 A

【问题讨论】:

  • 以与编写代码相同的方式格式化示例输入/输出。
  • awk 可能不是最好的选择。你会考虑使用 python 解决方案吗?
  • @stark 对于这个问题,在简洁性、可移植性、效率等方面,很难比 awk 解决方案做得更好。

标签: linux if-statement awk


【解决方案1】:
$ awk 'NR==FNR{a[$2]=$1; next} $2 in a{print a[$2]-$1, $2}' file1 file2
0 A
-40 D

【讨论】:

    猜你喜欢
    • 2013-09-06
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多