usar como comandos comando cluster unix shell awk freebsd gnu-coreutils

unix - como - Forzar el orden de los campos de salida desde el comando de corte



como usar cut cut (2)

Quiero hacer algo como esto:

cat abcd.txt | cut -f 2,1

y quiero que la orden sea 2 y luego 1 en la salida. En la máquina que estoy probando (FreeBSD 6), esto no está sucediendo (su impresión en orden de 1,2). ¿Me puede decir cómo hacer esto?

Sé que siempre puedo escribir un script de shell para hacer esta inversión, pero estoy buscando algo usando las opciones de comando ''cortar''.

Creo que estoy usando la versión 5.2.1 de coreutils que contienen corte.


Esto no se puede hacer usando corte . De acuerdo con la página man:

La entrada seleccionada se escribe en el mismo orden en que se lee, y se escribe exactamente una vez.

En cambio, puedes hacerlo usando awk , así:

awk ''{print($2,"/t",$1)}'' abcd.txt

Reemplace el / t con lo que sea que esté usando como separador de campo.


La respuesta de Lars fue genial, pero encontré una aún mejor. El problema con el suyo es que coincide / t / t como sin columnas. Para solucionar este problema, use lo siguiente:

awk -v OFS=" " -F"/t" ''{print $2, $1}'' abcd.txt

Dónde:

-F"/t" es qué cortar exactamente (pestañas).

-v OFS=" " es con lo que se separa (dos espacios)

Ejemplo:

echo ''A/tB/t/tD'' | awk -v OFS=" " -F"/t" ''{print $2, $4, $1, $3}''

Esto produce:

B D A