2009-06-24 12 views
25

que quiero hacer algo como esto:Forzar el orden de los campos de salida del comando de corte

cat abcd.txt | cut -f 2,1 

y quiero que el fin de ser 2 y 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.

Respuesta

27

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

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

su lugar, puede hacerlo utilizando awk, así:

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

Vuelva a colocar la \ t, con lo que usted está usando como separador de campo.

11

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

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

Dónde:

-F"\t" es lo que corta en exactamente (pestañas).

-v OFS=" " es qué separada con (dos espacios)

Ejemplo:

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

Este salidas:

B D A  
+1

En Cygwin que tuvieron que reemplazar -F "\ t" con - F \ t para que esto funcione –

Cuestiones relacionadas