我们如何使用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
但它加入所有行而不比较一个键
答案 0 :(得分:2)
作为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列,从文件2输出第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
值不完全匹配
答案 1 :(得分:1)
例如,如果您有两个文件,其中包含一列:
join -j 2 $2 $1
您可以在bash中阅读手动join
命令
您还可以将输出传输到column -t
答案 2 :(得分:0)
这样可行,但你的输入看似奇怪,导致奇数输出:
awk 'FNR!=1{a[$1" "$2]=a[$1" "$2] " " $3}END{for(i in a)print i a[i]}' server*txt
基本上,“FNR!= 1”使其忽略标题行(line1)。然后,对于每行读取,第3列将附加到关联数组(a []),由字段1和2索引,因此数组元素的索引将是组合的日期和时间字段。
最后,打印出关联数组的所有键以及最后的聚合正常运行时间。
这适用于任何数量的服务器* .txt文件,而不会让命令行变得更长,更难以理解。
示例输出:
20140209 00:00-00:05 99.958775783378% 99.9585236073714% 99.9486422652602%
20140209 00:10-00:15 99.946565356473% 99.9379659962486% 99.9433509611542%
20140209 00:20-00:25 99.9318584549217%
20140209 00:05-00:10 99.951034588364% 99.9506962782437%
您可能希望之后对输出进行排序,因为awk数组没有固有的顺序。