約100,000個のファイルがあり、各ファイルには次の一意の行があります。
ファイル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
... 2番目のフィールド(下線付き_
)で数字でソートし、キーが一意の場合は3番目のフィールドに基づいてソートします。その後、結果の出力がパイプされ、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
これにより、呼び出しなしでリストされた3つのフィールドの間に一意の行が保持されますuniq
(オプションが追加されました-u
)。これらのソートフィールドは、入力ファイルのソート方法と一致する必要があります。