根据最后一列中的值比较两个文件

Ali*_*Ali 5 awk text-processing

我有两个文件,每个文件都有几列并且行号不相等,我需要读取两个文件中的第三列并确保相同,然后比较两个文件中的第四列并获得最高数字并打印整行在第三个文件中。并且对于在另一个文件中找不到的行也将其作为最高数字

文件A

a b c 10
d e f 11
g h i 15
j k l 15
p l m 35
Run Code Online (Sandbox Code Playgroud)

苍蝇乙

d e f 15
j k l 20
w x z 40
Run Code Online (Sandbox Code Playgroud)

所需输出

文件 C

a b c 10
d e f 15
g h i 15
j k l 20
p l m 35
w x z 40
Run Code Online (Sandbox Code Playgroud)

Kus*_*nda 0

$ cat fileA fileB | sort -k3,3 -k4,4nr | sort -k3,3 -u
a b c 10
d e f 15
g h i 15
j k l 20
p l m 35
w x z 40
Run Code Online (Sandbox Code Playgroud)

这是一个由三个部分组成的管道:

  1. 连接fileAfileB.
  2. 对于第三列中的每个唯一值,根据第四列按数字降序对串联文件进行排序。这一步的结果是

    a b c 10
    d e f 15
    d e f 11
    g h i 15
    j k l 20
    j k l 15
    p l m 35
    w x z 40
    
    Run Code Online (Sandbox Code Playgroud)
  3. 再次排序,但删除重复项并仅使用第三列作为排序键。由于这将使该行保留第一个找到的排序键实例,但丢弃具有重复排序键的行(并且由于第一次排序,第四列中的值较低,因此它将给我们想要的结果。

这种方法完全忽略前两列的内容。

  • @Ali 如果这些答案之一解决了您的问题,请花一点时间并通过单击左侧的复选标记来[接受](http://unix.stackexchange.com/help/someone-answers)。这会将问题标记为已回答,也是 Stack Exchange 网站上表达感谢的方式。 (2认同)