如何使用Python或Bash合并指定的两个制表符分隔文件?
问题描述
现有两个制表符分隔文件:
**文件1(file1.txt)**内容:
a 1 2 3 b 6 7 8 c 9 0 9
**文件2(file2.txt)**内容:
a_rna_1 r r x a_rna_2 q q d a_rna_3 c c c b_rna_1 e e e c_rna_1 a a g
需要将它们合并为以下格式:
a 1 2 3 a_rna_1 r r x a 1 2 3 a_rna_2 q q d a 1 2 3 a_rna_3 c c c b 6 7 8 b_rna_1 e e e c 9 0 9 c_rna_1 a a g
是否存在自动实现该合并的方法?
自动合并方法
可以用awk工具实现,核心逻辑是通过文件2第一列的前缀(如a_rna_1的前缀为a)关联文件1对应的行,然后拼接输出。
执行以下命令即可完成合并:
awk 'BEGIN{FS=OFS="\t"} NR==FNR{map[$1]=$0;next} {prefix=$1;sub(/_rna_.*/,"",prefix);print map[prefix],$0}' file1.txt file2.txt
命令解释
BEGIN{FS=OFS="\t"}:设置输入和输出的分隔符为制表符,保证格式一致NR==FNR{map[$1]=$0;next}:处理第一个文件(file1.txt),将每行内容存入数组map,键为第一列的值(如a、b)prefix=$1;sub(/_rna_.*/,"",prefix):处理第二个文件时,提取第一列的前缀(去掉_rna_及后面的内容)print map[prefix],$0:将文件1中对应前缀的行与文件2当前行拼接输出
如果文件2第一列的前缀规则有变化(比如后缀不是_rna_),只需调整sub函数中的正则表达式即可适配。
内容的提问来源于stack exchange,提问作者Su C
相关产品推荐
相关产品推荐

