首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何合并标签分隔的文件?

如何合并标签分隔的文件?
EN

Ask Ubuntu用户
提问于 2016-04-12 10:55:36
回答 2查看 4K关注 0票数 3

我有3个选项卡分隔的文件,如下所示:

档案1:

代码语言:javascript
复制
1   Hhe.7
2   Hpyl.1
10  Hac.2

档案2:

代码语言:javascript
复制
3   Hac.2
15  Hpyl.1
33  Hhe.7

档案3:

代码语言:javascript
复制
70  Hpyl.1
23  Hhe.7
9   Hac.2

如何将这些文件(使用命令行)合并到一个文件中以获得以下输出:

代码语言:javascript
复制
1  33  23  Hhe.7
2  15  70  Hpyl.1
10  3  9  Hac.2
EN

回答 2

Ask Ubuntu用户

回答已采纳

发布于 2016-04-12 11:23:08

在一个小型python脚本中,您可以组合无限数量的文件:

代码语言:javascript
复制
#!/usr/bin/env python3
import sys

#read the files, split the lines for reordering
lines = sum([[l.strip().split() for l in open(f).readlines()]\
             for f in sys.argv[1:]], [])
# get the unique last sections
values = set(map(lambda x:x[1], lines))
# combine them with the combined first sections
newlist = [[y[0] for y in lines if y[1]==x]+[x] for x in values]
for l in newlist:
    print(("\t").join(l))

将其复制到一个空文件中,保存为merge.py,通过命令运行它:

代码语言:javascript
复制
python3 /path/to/merge.py file1, file2, file3 (file4, file5 etc.)

示例文件的输出:

代码语言:javascript
复制
10  3   9   Hac.2
1   33  23  Hhe.7
2   15  70  Hpyl.1

添加更多文件

如前所述,如果我添加第四个文件,原则上文件的数量是无限的:

代码语言:javascript
复制
40   Hhe.7
50   Hpyl.1
60   Hac.2

然后运行命令:

代码语言:javascript
复制
python3 /path/to/merge.py file1, file2, file3, file4

产出如下:

代码语言:javascript
复制
40  23  33  1   Hhe.7
50  70  15  2   Hpyl.1
60  9   3   10  Hac.2
票数 1
EN

Ask Ubuntu用户

发布于 2016-04-12 11:30:43

这是join的一项工作,它可以连接两个文件的公共字段:

代码语言:javascript
复制
$ join -11 -22 -o1.2,1.3,2.1,0 <(join -j2 <(sort -k2,2 f1.txt) <(sort -k2,2 f2.txt)) <(sort -k2,2 f3.txt)
10 3 9 Hac.2
1 33 23 Hhe.7
2 15 70 Hpyl.1

由于join一次只接收两个输入文件,所以我们使用进程替换(<())将join-ing的输出与第三个文件一起传递。

票数 3
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/756554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档