我有大约 100000 个文件,每个文件都有独特的行,例如:
文件1.txt
chr1_1_200
chr1_600_800
...
文件2.txt
chr1_600_800
chr1_1000_1200
...
文件3.txt
chr1_200_400
chr1_600_800
chr1_1000_1200
...
每个文件大约有 3000 万行,何时执行命令:
cat *txt | sort -u > Unique_Position.txt
系统内存不足。在 Linux 中如何使用普通命令行来处理这个问题?
答案1
如果文件已经以可接受的方式排序,您可以对它们进行合并排序,然后对uniq
它们进行排序:
sort -t_ -k2,2n -k3,3n -m -- *.txt | uniq > Unique_Position.txt
...它对第二个字段进行数字排序(由下划线分隔_
),如果这些键是唯一的,则按第三个字段进行排序。然后将生成的输出通过管道传输,uniq
然后重定向到输出文件。
鉴于上面的(简短)示例输入,结果为:
chr1_1_200
chr1_200_400
chr1_600_800
chr1_1000_1200
如果您能够完全指定要保留的行的排序字段,则可以sort
通过添加-u
选项来完成所有操作:
sort -t_ -k1 -k2,2n -k3,3n -m -u *.txt > Unique_Position.txt
这将保留三个列出字段之间的唯一行,而无需调用uniq
(注意添加了该-u
选项)。这些排序字段需要与输入文件的排序方式相匹配。