O Python torna isso fácil ...
open('out.txt', 'w').write('\n'.join(sorted(open('in.txt'), key=lambda x: x.count('_'))))
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?
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.
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.