我有 2 个文件想加入第一列: 文件 1 包含 46395029 行,文件 2 包含 86510559。
文件1.txt
>ID sequence
CJP75M1:393:C2T21ACXX:8:1101:2069:1997 1:N:0:_45 TAGTATTACGACG
CJP75M1:393:C2T21ACXX:8:1101:2711:1992 1:N:0:_65 TCCGAGGCCCTGTAATTGGAATGAGTAC
CJP75M1:393:C2T21ACXX:8:1101:3822:1989 1:N:0:_115 CCGGAGAGGGAGCCTGAGAAACGGCTACCAC
文件2.txt
>ID Barcode
CJP75M1:393:C2T21ACXX:8:1101:2069:1997 1:N:0:_45 CTCG
CJP75M1:393:C2T21ACXX:8:1101:2711:1992 1:N:0:_65 CTAG
CJP75M1:393:C2T21ACXX:8:1101:3822:1989 1:N:0:_115 CTGG
我想在第一个列上合并这两个文件:
>TAGTATTACGACG CTCG
TCCGAGGCCCTGTAATTGGAATGAGTAC CTAG
CCGGAGAGGGAGCCTGAGAAACGGCTACCAC CTGG
只需要 file1 中的行,因此结果文件应“仅”包含 46395029 行。 我用 awk 做到了:
awk 'BEGIN {FS= "\t"; OFS="\t"} { while (getline < "file1.txt") { f[$1] = $2} {print $2, f[$1] }}' "file2.txt" | sed '1d' > result.txt
但它真的很长(运行 2 天)。我有一个 64 位/16Go RAM 的 linux debian(稳定)服务器
有什么想法吗? 谢谢
最佳答案
这是 awk
的另一种方式:
awk 'FNR==1{next}NR==FNR{map[$1,$2]=$3;next}(map[$1,$2]){print map[$1,$2],$3}' file2 file1
- 跳过两个文件的第一行
- 从 file2 创建一个索引在第 1 列和第 2 列的数组
- 如果 map 存在于 file1 中,打印该行
关于java - 合并/加入两个大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22711489/