按每行的特定位置对文本进行排序

按每行的特定位置对文本进行排序

我想要实现的是按文本中的特定点对文本行进行排序(文本行没有空格或列)。我已经找到了解决方案,但我想知道是否有更直接、更简单的方法。

我当前的方法是造成中断,即在每行的同一位置创建一个新列(就在我想要排序的点之前 - 这是 Sn_L001_Rn),然后按该列排序,然后连接两列重新走到一起。这可行,但看起来过于复杂和笨重。我看过关于用 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    

为了增加进一步的复杂性,在 超过 1 个相同 Sn 的情况下,我希望它考虑到名称(尽管我认为这可以使用 中的标志来解决sort)。

答案1

sort -t_ -k2 infile将使用第二个键以下划线作为分隔符对数据进行排序。

相关内容