各行の特定の位置でテキストを並べ替える

各行の特定の位置でテキストを並べ替える

私が実現したいのは、テキストの特定のポイントでテキスト行を並べ替えることです (テキスト行にはスペースや列はありません)。 これに対する解決策は考え出しましたが、もっと直接的で簡単な方法があるかどうか知りたいです。

私が現在行っている方法は、改行、つまり各行の同じ場所 (並べ替えの基準にするポイントの直前 - これは Sn_L001_Rn) に新しい列を作成し、その列で並べ替えてから、2 つの列を結合し直すことです。この方法は機能しますが、複雑すぎて扱いにくいようです。awk でスコア システムを作成するという投稿を見たことがありますが、私のスコアは少なくとも 96 になるので、これは長すぎるようです。また、sqlite が適用できるかもしれないと知りましたが、これも同様に長すぎるようです。この質問がすでになされている場合は申し訳ありませんが、これまでのところ、これを解決するための簡単な方法を見つけることができませんでした。

入力例を次に示します。

SOON_S2_L001_R1_001.txt    
SOON_S2_L001_R2_001.txt    
HELLO_S4_L001_R1_001.txt    
HELLO_S4_L001_R2_001.txt    
BASH_S1_L001_R1_001.txt    
BASH_S1_L001_R2_001.txt    
WORLD_S3_L001_R1_001.txt    
WORLD_S3_L001_R2_001.txt    

望ましい出力:

BASH_S1_L001_R1_001.txt    
BASH_S1_L001_R2_001.txt    
SOON_S2_L001_R1_001.txt    
SOON_S2_L001_R2_001.txt    
WORLD_S3_L001_R1_001.txt    
WORLD_S3_L001_R2_001.txt    
HELLO_S4_L001_R1_001.txt    
HELLO_S4_L001_R2_001.txt    

さらに複雑なことに、 に同じ Sn が複数ある場合は、名前を考慮に入れる必要があります (ただし、 のフラグを使用して解決できると思いますsort)。

答え1

sort -t_ -k2 infileアンダースコアを区切り文字として 2 番目のキーを使用してデータを並べ替えます。

関連情報