gpt4 book ai didi

java - 合并/加入两个大文件

转载 作者:太空宇宙 更新时间:2023-11-04 07:18:44 25 4
gpt4 key购买 nike

我有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com