何千ものソートされたファイルをリンクし、出力ファイルをすばやく並べ替えます。

何千ものソートされたファイルをリンクし、出力ファイルをすばやく並べ替えます。

約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)。これらのソートフィールドは、入力ファイルのソート方法と一致する必要があります。

関連情報