sort example column alphabetically shell command-line filter reverse

shell - column - sort ubuntu example



Cómo invertir las líneas de un archivo de texto? (8)

En GNU coreutils , hay tac (1)

Estoy escribiendo un pequeño script de shell que necesita invertir las líneas de un archivo de texto. ¿Hay un comando de filtro estándar para hacer este tipo de cosas?

Mi aplicación específica es que estoy obteniendo una lista de identificadores de compromiso de Git, y quiero procesarlos en orden inverso:

git log --pretty=oneline work...master | grep -v DEBUG: | cut -d'' '' -f1 | reverse

Lo mejor que he encontrado es implementar reverse así:

... | cat -b | sort -rn | cut -f2-

Esto usa cat para numerar cada línea, luego sort para ordenarlas en orden numérico descendente (que termina revirtiendo todo el archivo), luego cut para eliminar el número de línea innecesario.

Lo anterior funciona para mi aplicación, pero puede fallar en el caso general porque cat -b solo numera líneas no en blanco.

¿Hay una forma mejor y más general de hacer esto?


: "@(#)$Id: reverse.sh,v 1.2 1997/06/02 21:45:00 johnl Exp $" # # Reverse the order of the lines in each file awk '' { printf("%d:%s/n", NR, $0);}'' $* | sort -t: +0nr -1 | sed ''s/^[0-9][0-9]*://''

Funciona como un encanto para mí...


cat -b solo números líneas no en blanco "


Si ese es el único problema que desea evitar, ¿por qué no usar "cat -n" para numerar todas las líneas?


Similar al ejemplo sed anterior, usando perl : tal vez más memorable (dependiendo de cómo esté conectado su cerebro):

perl -e ''print reverse <>''


La respuesta no es 42 sino tac .

Editar: más lento pero consume más memoria usando sed

sed ''x;1!H;$!d;x''

y aún más

perl -e''print reverse<>''


Hay un comando estándar para su propósito:

tail -r file.txt

imprime las líneas de archivo.txt en orden inverso


En este caso, solo usa --reverse :

$ git log --reverse --pretty=oneline work...master | grep -v DEBUG: | cut -d'' '' -f1


rev <name of your text file.txt>

Incluso puedes hacer esto:

echo <whatever you want to type>|rev