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