Forzare l'ordine dei campi di output dal comando cut
-
10-07-2019 - |
Domanda
Voglio fare qualcosa del genere:
cat abcd.txt | cut -f 2,1
e voglio che l'ordine sia 2 e quindi 1 nell'output. Sulla macchina che sto testando (FreeBSD 6), questo non sta succedendo (la sua stampa è in ordine 1,2). Puoi dirmi come fare?
So che posso sempre scrivere uno script di shell per fare questo rovesciamento, ma sto cercando qualcosa usando le opzioni del comando 'cut'.
Penso di usare la versione 5.2.1 dei coreutils contenenti cut.
Soluzione
Questo non può essere fatto usando cut
. Secondo la pagina man:
L'input selezionato è scritto nello stesso ordine in cui è stato letto, ed è scritto esattamente una volta.
Patching cut
è stato proposto many volte , ma anche le patch complete sono state respinte .
Invece, puoi farlo usando awk
, in questo modo:
awk '{print($2,"\t",$1)}' abcd.txt
Sostituisci il \ t
con tutto ciò che stai usando come separatore di campo.
Altri suggerimenti
La risposta di Lars è stata grandiosa, ma ne ho trovata una ancora migliore. Il suo problema è che non corrisponde a nessuna colonna. Per risolvere il problema, utilizzare quanto segue:
awk -v OFS=" " -F"\t" '{print $2, $1}' abcd.txt
Dove:
-F " \ t "
è cosa tagliare esattamente (tabs).
-v OFS = " "
è ciò con cui separare (due spazi)
Esempio:
echo 'A\tB\t\tD' | awk -v OFS=" " -F"\t" '{print $2, $4, $1, $3}'
Questo output:
B D A