Сортировать текст по определенному месту в каждой строке

Сортировать текст по определенному месту в каждой строке

Я хочу добиться сортировки строк текста по определенной точке в тексте (строки текста не имеют пробелов или столбцов). Я разработал решение для этого, но я хочу узнать, есть ли более прямой и простой способ сделать это.

Мой текущий метод для этого — сделать разрыв, т. е. создать новый столбец в том же месте на каждой строке (прямо перед точкой, по которой я хочу сортировать — это 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сортирует данные, используя второй ключ с подчеркиванием в качестве разделителя.

Связанный контент