Pregunta

Quiero hacer algo como esto:

cat abcd.txt | cut -f 2,1 

y quiero que el orden sea 2 y luego 1 en la salida. En la máquina que estoy probando (FreeBSD 6), esto no está sucediendo (se imprime en el orden 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 contiene cut.

¿Fue útil?

Solución

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

  

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

Parchear cut ha sido propuesto muchos veces , pero incluso los parches completos han sido rechazados .

En su lugar, puede hacerlo usando awk , así:

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

Reemplace el \ t con lo que esté utilizando como separador de campo.

Otros consejos

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

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

Dónde:

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

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

Ejemplo:

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

Esto genera:

B    D    A    
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top