【问题标题】:Merging two files in Unix to selectively print columns from both files based on Key Column在 Unix 中合并两个文件以根据 Key Column 有选择地打印两个文件中的列
【发布时间】:2019-12-21 10:56:06
【问题描述】:

我有两个文本文件:

文件 1 - 连接 ID、主机、IP
File2 - ConnectionID、DestType、DestName、计数

我想将两个文件中匹配的 ConnectionID 打印为 ConnectionID,Host,IP,DestType,DestName,Count 并从两个文件中分别吐出不匹配的行。

示例数据:

文件 1:四行

1,serverA,1.1.1.1
2,ServerA,1.1.1.1
3,ServerB,1.1.1.2
4,ServerC,1.1.1.3

文件 2:三行

1,Q,Dest1,10
3,T,Dest2,20
5,T,Dest3,45

想要的输出为:

1,ServerA,1.1.1.1,Q,Dest1,10
3,ServerB,1.1.1.2,T,Dest2,20
2,ServerA,1.1.1.1,null,null,null
4,ServerC,1.1.1.3,null,null,null
5,null,null,T,Dest3,45

我想要使用 awk、Perl、sed 等的 Unix 命令。

这就像在数据库中:

select columns from table a, table b where a.ConnectionID=b.ConnectionID

还有内连接和外连接
所有结果作为输出

【问题讨论】:

  • 感谢您更新问题。使其更易于阅读。

标签: shell unix scripting


【解决方案1】:

join 程序就是为这类事情而设计的。它与 SQL 运算符同名并非巧合。

join -t, -o 0,1.2,1.3,2.2,2.3,2.4 -a1 -a2 -e null file1 file2

应该可以解决问题。请注意,两个文件都应该像您的示例文件一样在第一列排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-28
    • 2017-04-16
    • 2021-09-18
    • 1970-01-01
    • 2015-01-18
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多