我有两个文件,我要在其中创建第三个文件,其中包含所有信息,每一列都用制表符分隔。
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'
rule_ref: _avc ,output_tag: 'hello' 1
rule_ref: _cdf ,output_tag: 'hi' 4
rule_ref: _xyz ,output_tag: 'bye' 5
并想要一个 file3 ,例如:
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'
文件1的第二列与文件2的第一列匹配,文件3包含 file1的第一列,file2的第二列和file1的第三列。
我在Google上进行搜索,但没有找到解决此问题的结果。请帮助
答案 0 :(得分:0)
首先,我假设您正在使用 Pandas Dataframe ,然后您只需要使用merge。
尝试一下:
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
答案 1 :(得分: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这样的shell能够理解$'\t'
。)>