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.

È stato utile?

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    
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top