gpt4 book ai didi

linux - 从匹配多个模式的一个文件创建新的多个文件的快速方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:11:07 24 4
gpt4 key购买 nike

我有一个名为 uniq.txt 的文件(20,000 行)。

head uniq.txt 
1
103
10357
1124
1126

我有另一个名为 all.txt 的文件(106,371,111 行)

head all.txt
cg0001 ? 1 -0.394991215660192
cg0001 AB 103 -0.502535661820095
cg0002 A 10357 -0.563632386999913
cg0003 ? 1 -0.394991215660444
cg0004 ? 1 -0.502535661820095
cg0004 A 10357 -0.563632386999913
cg0003 AB 103 -0.64926706504459

我想从 all.txt 中创建新的 20,000 个文件,以匹配 uniq.txt 的每一行模式。例如,

head 1.newfile.txt 
cg0001 ? 1 -0.394991215660192
cg0003 ? 1 -0.394991215660444
cg0004 ? 1 -0.502535661820095

head 103.newfile.txt
cg0001 AB 103 -0.502535661820095
cg0003 AB 103 -0.64926706504459

head 10357.newfile.txt
cg0002 A 10357 -0.563632386999913
cg0004 A 10357 -0.563632386999913

有什么方法可以真正快速地制作新的 20,000 个文件?我当前的脚本需要 1 分钟来制作一个新文件。我猜它每次创建新文件时都会扫描 all.txt 文件。

最佳答案

你可以用awk试试。理想情况下,您不需要在 awk 中使用 >>>,但由于您已声明将有 20,000 个文件,我们不想通过打开太多文件来耗尽系统资源。

awk '
NR==FNR { names[$0]++; next }
($3 in names) { file=$3".newfile.txt"; print $0 >>(file); close (file) }
' uniq.txt all.txt

这将首先将 uniq.txt 文件扫描到内存中,创建一个查找表。然后它将通读 all.txt 文件并开始将条目插入到相应的文件中。

关于linux - 从匹配多个模式的一个文件创建新的多个文件的快速方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36830372/

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