bash - 使用 key 连接多个文件

标签 bash scripting

我们如何连接多个具有 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/

相关文章:

bash - 根据模式连接线

linux - 在前台生成并行进程

php - 试图从 php 脚本 : returns a pid but doesn't execute 运行 python 脚本

windows - 需要有关 Windows 批处理脚本的帮助

linux - 为什么需要将#!/bin/bash 放在脚本文件的开头?

bash - 如何将文件名从 unicode 转换为 ascii

linux - Netcat进入apache密码保护目录

python - 如何让 `python` 在 WSL bash 中运行 Python 3?

linux - grep awk 忽略字符

linux shell 日期问题