Como ordenar um arquivo com linhas de string pelo número de um símbolo específico na linha?

2

Digamos que eu tenha um arquivo grande de texto simples com uma string em todas as linhas. A cadeia consiste apenas em caracteres alfabéticos, exceto os sublinhados _ , que dividem as cadeias em sílabas.

Eu quero classificar o arquivo de texto pelo valor sublinhado na string. Pontos de bônus para colocar cada grupo de sublinhados X em seu próprio arquivo.

Exemplo:

hel_lo
hi
su_per_u_ser
o_ver_flow

classificaria em:

hi
hel_lo
o_ver_flow
su_per_u_ser

Eu tentei fazer isso com o regex, mas ainda não encontrei uma maneira adequada de contar os sublinhados (regex me confunde completamente).

Alguém sabe como eu posso lidar com isso?

    
por SpacyRicochet 21.10.2013 / 10:52

3 respostas

3

O Python torna isso fácil ...

open('out.txt', 'w').write('\n'.join(sorted(open('in.txt'), key=lambda x: x.count('_'))))
    
por 21.10.2013 / 10:58
4

Código simples em 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
        }

Coloque o script em um arquivo e, em seguida, chmod a+x do arquivo. A entrada pode vir de stdin ou de um arquivo especificado como parâmetro para o script.

A saída será classificada em arquivos denominados syllable-x.txt , em que x é o número de sílabas.

    
por 21.10.2013 / 11:41
1

Ainda mais simples: um one-liner bash:

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

A saída aparecerá nos arquivos chamados srtN.txt, onde N é o número de ocorrências do caractere de sublinhado na linha.

    
por 21.10.2013 / 11:45