如何合并基于列的匹配两个文件?

问题描述 投票:0回答:2

我有两个文件外面我想创建第三个包含了所有的信息和每列由制表符分隔。

file 1:

67      rule_ref: _avc ,output_tag: 'hello'
2       rule_ref: _cdf ,output_tag: 'hi'
334     rule_ref: _xyz ,output_tag: 'bye'
1       rule_ref: _abc ,output_tag: 'go'

file 2:

rule_ref: _avc ,output_tag: 'hello'     1
rule_ref: _cdf ,output_tag: 'hi'        4
rule_ref: _xyz ,output_tag: 'bye'    5

并想一个文件3这样的:

67    1    rule_ref: _avc ,output_tag: 'hello'
2     4    rule_ref: _cdf ,output_tag: 'hi'
334   5    rule_ref: _xyz ,output_tag: 'bye'
1     0    rule_ref: _abc ,output_tag: 'go'

到文件2和文件3的第一列文件1场比赛的第2列包含文件1第1列,从文件1文件2和第3列第2列。

我在谷歌搜索,但没有找到任何结果,解决这个问题。请帮忙

python shell unix
2个回答
0
投票

这真的很难说,因为SO吃的标签,你的列的方式。另一种性格会使人们更方便。

根据您的描述,虽然在第一个文件,我认为数字是一列rule_ref: _avc ,output_tag: 'hello'等第二?而同类的第二个文件?但你提到的第一个文件,它不会与计划存在的第三列。你的意思是第二个?

如果是这样的话...

$ join -t $'\t' -1 2 -2 1 -a 1 -e 0 -o '1.1 2.2 1.2' <(sort -t $'\t' -k 2 file1.txt) <(sort -t $'\t' -k 1 file2.txt)
1   0   rule_ref: _abc ,output_tag: 'go'
67  1   rule_ref: _avc ,output_tag: 'hello'
2   4   rule_ref: _cdf ,output_tag: 'hi'
334 5   rule_ref: _xyz ,output_tag: 'bye'

join要求它加入的相应字段进行排序的文件,你的例子都没有,因此排序。此外,需要诸如bash,理解$'\t'一个shell)。


0
投票

首先,我假设你使用的是熊猫据帧,然后ü只需要使用合并。

尝试这个:

file1.merge(file2, on='Column with same values', left_on='lkey', right_on='rkey')

文件:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html

© www.soinside.com 2019 - 2024. All rights reserved.