Comment trier un fichier séparé par des tabulations sur la nième colonne à l'aide du tri cygwin?

StackOverflow https://stackoverflow.com/questions/426647

  •  06-07-2019
  •  | 
  •  

Question

J'ai un énorme fichier séparé par des tabulations que je veux trier sur sa 2ème colonne. Je dois utiliser le caractère de tabulation comme délimiteur de champ dans le tri cygwin. J'ai donc besoin de quelque chose comme ça:

sort -t \t -k 2,2 in.txt > out.txt

Mais l'invite de commande évalue '\ t' littéralement et non en tant que caractère de tabulation. Notez que je dois le faire sur une machine Windows exécutant Cygwin. Des variations telles que

sort -t "\t"
sort -t \"\t\"

ne fonctionne pas, pas plus que le mettre dans un fichier cmd avec un onglet à la place du \ t ci-dessus.

Éditer: une solution utilisant soit le shell DOS, soit le shell Cygwin bash est très bien.

Était-ce utile?

La solution

Sur ma machine (invite bash Mac, type GNU ...), cela fonctionne:

sort -t '   ' -k 2,2 in.txt > out.txt

(Un onglet "réel" entre les guillemets.)

Pour y accéder, je tape CTRL-V, TAB (CTRL-V suivi de TAB).

EDIT: je l’ai maintenant testé sur une machine Windows à partir de l’invite cygwin et il fonctionne de la même manière (comme je l’attendais, bash est bash).

Autres conseils

Vous devez ajouter un signe $ devant le \ t pour activer l’interpolation de chaîne, afin que l’onglet soit réellement envoyé pour trier. Cela devrait fonctionner dans n'importe quel terminal:

sort -t \t' -k 2,2 in.txt > out.txt

Dans l’invite de commande Windows, la solution la plus simple que j’ai trouvée consiste à désactiver d’abord la complétion par tabulation avec:

cmd /f:off

Ensuite, vous pouvez taper un caractère de tabulation littéral.

Je voulais une solution pour le tri GnuWin32 sous Windows, mais aucune des solutions ci-dessus ne fonctionnait pour moi sur la ligne de commande. Mais le fichier batch suivant (.bat) a fonctionné, ce que je voulais quand même. Tapez le caractère de tabulation entre guillemets.

C: > cat foo.bat

triez -k3 -t " " tabfile.txt

Quelqu'un voit l'ironie ici?
Vous devez sauter à travers des cerceaux pour que le caractère de tabulation devienne une tabulation ...

À l’invite de commande Windows, j’ai pu le faire avec:
c: \ bin \ sort -t " (onglet actuel) " mais seulement après avoir démarré le cmd / f: off (comme indiqué ci-dessus)

Sur un fichier Windows bat, je pouvais faire la même chose tant que l'éditeur de texte (notepad2 :-) était configuré pour insérer des onglets sous forme d'onglets, pas d'espaces.

Il existe quelques astuces bien connues pour utiliser un -t $ '\ t " mais j’ai essayé environ 2 ^ 16 combinaisons sans chance ni cheveux restants.

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