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 sortalguna otra herramienta?
text-processing
sort
Caleb Xu
fuente
fuente

bin: bop boopantesboatkeeper: 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
awkpara prefijar el número de campos a cada línea. Luego,sortpor ese número y lo eliminamos concut.fuente
En GNU reciente,
awkse puede usar laPROCINFOmatriz 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$0e imprimirlo en la salida deseada, en su caso, sería"@ind_num_desc":fuente
NF" "$0" "NR, solo tendríaNRun 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