各行の特定の位置に基づいてテキストを並べ替える

各行の特定の位置に基づいてテキストを並べ替える

私が達成したいのは、テキストの特定のポイント(スペースや列のないテキスト行)に基づいてテキスト行をソートすることです。解決策を見つけましたが、もっと直接的で簡単な方法があるかどうかを知りたいです。

私の現在のアプローチは中断を引き起こすことです。つまり、各行の同じ位置に新しい列を作成し(ソートしたい点の直前、つまり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が1つ以上の場合は名前を考慮したいと思います(この問題は のフラグを使って解決できると思いますsort)。

答え1

sort -t_ -k2 infileデータは、下線を区切り文字として使用し、2 番目のキーを使用してソートされます。

関連情報