Entrada dada:
hello: world foo bar baz
bar:
baz: bin boop bop fiz bang beep
bap: bim bam bop
boatkeeper: poughkeepsie
Me gustaría ordenarlo en la mayoría de las palabras en la parte superior, al menos al final, así:
baz: bin boop bop fiz bang beep
hello: world foo bar baz
bap: bim bam bop
boatkeeper: poughkeepsie
bar:
¿Cómo haría esto con sort
alguna otra herramienta?
text-processing
sort
Caleb Xu
fuente
fuente
bin: bop boop
antesboatkeeper: poughkeepsie
. Si dos líneas comparten el mismo número de palabras, preferiría que los lazos se alfabetizaran, pero eso no es un requisito.Respuestas:
Podrías hacer algo como:
Usamos
awk
para prefijar el número de campos a cada línea. Luego,sort
por ese número y lo eliminamos concut
.fuente
En GNU reciente,
awk
se puede usar laPROCINFO
matriz para definir muchos parámetros internos, incluido el orden en que se imprimen los elementos de la matriz (controlados por elemento"sorted_in"
). Por lo tanto, podemos construir e indexar con el valor deNF" "NR
, qué elementos tienen valor$0
e imprimirlo en la salida deseada, en su caso, sería"@ind_num_desc"
:fuente
NF" "$0" "NR
, solo tendríaNR
un mecanismo de respaldo / manejo de duplicados.cmp_func()
, gnu awk lo permite.Perl one-liner:
Si quieres romper los lazos usando el orden alfabético:
fuente
A través de pitón.
o
fuente