我们如何连接多个具有 3 列的文件? join.txt 的预期结果,
server7.txt
DATE TIME server7
20140209 00:00-00:05 99.958775783378%
20140209 00:05-00:10 99.951034588364%
20140209 00:10-00:15 99.946565356473%
server8.txt
DATE TIME server8
20140209 00:00-00:05 99.9585236073714%
20140209 00:05-00:10 99.9506962782437%
20140209 00:10-00:15 99.9379659962486%
server9.txt
DATE TIME server9
20140209 00:00-00:05 99.9486422652602%
20140209 00:10-00:15 99.9433509611542%
20140209 00:20-00:25 99.9318584549217%
join.txt
DATE TIME server7 server8 server9
20140209 00:00-00:05 99.958775783378% 99.9585236073714% 99.9486422652602%
20140209 00:05-00:10 99.951034588364% 99.9506962782437% 99.9433509611542%
20140209 00:10-00:15 99.946565356473% 99.9379659962486% 99.9318584549217%
我已经用过
粘贴 -d""服务器*.txt
但它连接所有行而不比较键
最佳答案
如commented above ,您的输入与预期输出不太匹配。文件server9.txt
缺少时间行 00:05-00:10
并包含一个额外的 00:20-00:25
。也就是说,以下内容应该让您了解如何加入文件。说:
join -1 1 -2 1 -1 2 -2 2 -o 1.1,1.2,1.3,2.3 server7.txt server8.txt
会产生:
DATE TIME server7 server8
20140209 00:00-00:05 99.958775783378% 99.9585236073714%
20140209 00:05-00:10 99.951034588364% 99.9506962782437%
20140209 00:10-00:15 99.946565356473% 99.9379659962486%
在上面的命令中,我们根据两个文件中的第 1 列和第 2 列连接文件,并输出 file1 中的第 1、2、3 列和 file2 中的第 3 列。
您可以将此输出传送到第三个文件:
join -1 1 -2 1 -1 2 -2 2 -o 1.1,1.2,1.3,2.3 server7.txt server8.txt | join -1 1 -2 1 -1 2 -2 2 -o 1.1,1.2,1.3,1.4,2.3 - server9.txt
这将导致:
DATE TIME server7 server8 server9
20140209 00:00-00:05 99.958775783378% 99.9585236073714% 99.9486422652602%
20140209 00:10-00:15 99.946565356473% 99.9379659962486% 99.9433509611542%
如上所述,输出与预期输出之间的差异是由于 TIME
server9
中的专栏与 TIME
不太匹配其他文件中的值。
关于bash - 使用 key 连接多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21795226/