【发布时间】:2017-10-18 10:05:28
【问题描述】:
我知道有人问过一些类似的问题,但我很难获得 awk、join 或其他任何东西来做我想做的事。
我必须使用制表符分隔文件。
文件 1:
Text1 Text2 Text3
1000 128 128/D59
1001 116 116/A95
每一行都是唯一的,第一列中的每个元素只出现一次。
文件 2:
Text1 Text4 Text5 Text6
1000 1003 19901001 1
1000 1002 19901001 2
1001 1003 19971005 0
每一行都是唯一的,但任何元素都可以在文件中出现多次。这两个文件的行数和列数明显不同。
我想要的文件3:
Text1 Text4 Text5 Text6 Text2 Text3
1000 1003 19901001 1 128 128/D59
1000 1002 19901001 2 128 128/D59
1001 1003 19971005 0 116 116/A95
列的顺序实际上并不重要。真实文件1有18024188行,真实文件2有89122313行。 到目前为止,我使用 join 或 awk 所做的所有操作都没有像示例中的第二个那样产生一行。我并不真正关心使用这两个程序,任何解决方案都适合。如果它更容易(有人解释我怎么做)我也可以将它转换成一个 sql 数据库并尝试加入它们(我正在尝试一个完整的外部连接,对吗?)。
提前致谢
【问题讨论】:
-
澄清一下:如果您想要
file2中存在的所有可能是或不是file1的记录,那么它将在file2上留下外部连接。如果您想要两个文件中的所有记录,那么它将是完全外部连接,并且相应的字段将为空,而这些字段不存在。你想要什么? -
这是一个很好的问题:file2 中不应该有在 file1 中没有对应记录的记录。所以两个连接都应该导致相同的结果。但是,如果我的数据已损坏,我很可能想知道这一点。所以我想我想要一个左外连接,并用 NA 填充或更正任何少于 6 列的行。编辑:我希望我很清楚。
-
:所以你基本上需要
Inner Join。检查我更新的答案。 -
wc -l file3.仅给出 64975775 行。所以 24146538 行丢失了。显然我有一些约会问题。所以我似乎需要一个左外连接作为找到问题的起点。编辑:还没有看到蝙蝠侠的答案。