Memory
連接數千個已經排序的文件并快速重新排序輸出文件
我有 ~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 中使用普通命令行來處理這個問題?
如果文件已經以可接受的方式排序,您可以對它們進行合併排序,然後對它們進行排序
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
選項)。這些排序欄位需要與輸入文件的排序方式相匹配。