2

Скажем, у меня есть большой текстовый файл со строкой в каждой строке. Строка состоит только из буквенных символов, за исключением символов подчеркивания _ , которые разделяют строки на слоги.

Я хочу отсортировать текстовый файл по количеству подчеркиваний в строке. Бонусные баллы за размещение каждой группы подчеркиваний X в отдельном файле.

Пример:

hel_lo
hi
su_per_u_ser
o_ver_flow

будет сортировать в:

hi
hel_lo
o_ver_flow
su_per_u_ser

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

Кто-нибудь знает, как я мог справиться с этим?

3 ответа3

4

Простой код в awk:

#!/usr/bin/awk -f

BEGIN   { FS = "_" }        # field separator = syllable separator
        {                   # for each input line
            if(NF > 0)      # if number of syllables > 0
                print $0 > "syllable-"NF".txt"  # print the line to a file
        }

Поместите скрипт в файл и затем выполните chmod a+x файл. Вход может поступать из stdin или из файла , указанного в качестве параметра сценария.

Вывод будет отсортирован в файлах с именем syllable-x.txt где x - количество слогов.

3

Python делает это легко ...

open('out.txt', 'w').write('\n'.join(sorted(open('in.txt'), key=lambda x: x.count('_'))))
1

Еще проще: bash one-liner:

 cat testfile | while read line; do echo $line >> srt$(echo $line | fgrep -o _ | wc -l).txt ; done 

Выходные данные появятся в файлах с именем srtN.txt, где N - количество вхождений символа подчеркивания в строке.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .