Dados fornecidos:
hello: world foo bar baz
bar:
baz: bin boop bop fiz bang beep
bap: bim bam bop
boatkeeper: poughkeepsie
Gostaria de classificá-lo na maioria das palavras no topo, no mínimo no final, da seguinte forma:
baz: bin boop bop fiz bang beep
hello: world foo bar baz
bap: bim bam bop
boatkeeper: poughkeepsie
bar:
Como eu faria isso com sort
ou com alguma outra ferramenta?
text-processing
sort
Caleb Xu
fonte
fonte
bin: bop boop
antesboatkeeper: poughkeepsie
. Se duas linhas compartilham o mesmo número de palavras, eu preferiria que os laços fossem alfabetizados, mas isso não é um requisito.Respostas:
Você poderia fazer algo como:
Usamos o
awk
prefixo do número de campos para cada linha. Então,sort
por esse número e removê-lo comcut
.fonte
No GNU recente,
awk
é possível usar oPROCINFO
array para definir muitos parâmetros internos, incluindo a ordem na qual os elementos do array são impressos (controlados pelo elemento"sorted_in"
). Assim, podemos construir e matriz indexados com o valor deNF" "NR
, quais elementos têm valor$0
e imprimi-lo na saída desejada, no seu caso, seria"@ind_num_desc"
:fonte
NF" "$0" "NR
, você teria apenasNR
um mecanismo de manipulação de fallback / duplicado.cmp_func()
- o gnu awk permite isso.One-liner Perl:
Se você deseja quebrar os laços usando ordem alfabética:
fonte
Através de python.
ou
fonte