Question

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 est effectuée dans l'ordre 1,2). Pouvez-vous me dire comment faire cela?

Je sais que je peux toujours écrire un script shell pour effectuer cette inversion, mais je cherche quelque chose en utilisant les options de la commande "couper".

Je pense utiliser la version 5.2.1 de coreutils contenant cut.

Était-ce utile?

La solution

Cela ne peut pas être fait avec cut . Selon la page de manuel:

  

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

La correction de coupé a été proposé de nombreux fois , mais même les correctifs complets ont été rejetés .

À la place, vous pouvez le faire avec awk , comme ceci:

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

Remplacez \ t par tout ce que vous utilisez comme séparateur de champ.

Autres conseils

La réponse de Lars était excellente mais j’en ai trouvé une meilleure. Le problème avec son est qu'il ne correspond à aucune colonne. Pour résoudre ce problème, utilisez ce qui suit:

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

Où:

-F "\ t" correspond à ce qu'il faut couper sur exactement (onglets).

-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}'

Cette sortie:

B    D    A    
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top