Forcer l’ordre des champs de sortie à partir de la commande cut

Je veux faire quelque chose comme ça:

cat abcd.txt | cut -f 2,1 

et je veux que l’ordre soit 2 puis 1 dans la sortie. Sur la machine que je teste (FreeBSD 6), cela ne se produit pas (son impression en 1,2 ordre). Pouvez-vous me dire comment faire cela?

Je sais que je peux toujours écrire un script shell pour effectuer cette inversion, mais je recherche quelque chose en utilisant les options de commande ‘cut’.

Je pense que j’utilise la version 5.2.1 de coreutils contenant cut.

Cela ne peut pas être fait en utilisant couper . Selon la page de manuel:

L’entrée sélectionnée est écrite dans le même ordre de lecture et est écrite exactement une fois.

Au lieu de cela, vous pouvez le faire en utilisant awk , comme ceci:

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

Remplacez le \ t par ce que vous utilisez comme séparateur de champs.

La réponse de Lars était géniale mais j’en ai trouvé une meilleure. Le problème avec le sien est qu’il correspond à \ t \ t comme aucune colonne. Pour résoudre ce problème, procédez comme suit:

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

Où:

-F"\t" est ce qu’il faut couper exactement (tabs).

-v OFS=" " est ce qu’il faut séparer (deux espaces)

Exemple:

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

Cela produit:

 BDA