Forzar el orden de los campos de salida desde el comando de corte
-
10-07-2019 - |
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.
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).
Ejemplo:
echo 'A\tB\t\tD' | awk -v OFS=" " -F"\t" '{print $2, $4, $1, $3}'
Esto genera:
B D A