web-dev-qa-db-fra.com

Comment puis-je utiliser une colonne pour délimiter des tabulations et non des espaces?

Je voudrais utiliser la commande Unix column pour formater du texte. J'ai des champs délimités par des tabulations, mais dans chaque champ il y a aussi des espaces. column délimite les espaces blancs (tabulations et espaces). Comment puis-je faire en sorte que la colonne utilise uniquement des tabulations comme délimiteur?

J'essayais de spécifier tab comme délimiteur en utilisant:

cat myfile | column -t -s"\t"
67
turtle
column -t -s '\t'

séparerait les colonnes des caractères \ et t.

column -s \t Est identique à column -s t, Car la barre oblique inverse est interprétée comme un opérateur de citation par le Shell.

Ici, vous voulez passer un vrai caractère TAB à la colonne. Avec ksh93, zsh, bash, mksh, busybox sh ou FreeBSD sh:

column -ts $'\t'

Ou entrez un vrai caractère de tabulation en tapant Ctrl-VTab à l'invite du shell (entre guillemets ou précédé d'une barre oblique inverse car le caractère de tabulation est un séparateur de jetons dans la syntaxe du shell, tout comme l'espace), ou utilisez "$(printf '\t')" (ces guillemets nécessaires pour désactiver l'opérateur split + glob car le caractère de tabulation se trouve également être dans la valeur par défaut de $IFS).

91
Stéphane Chazelas

J'ai utilisé ce qui suit (ne fonctionne que si votre texte ne contient pas |):

cat myfile | tr '\t' '|' | column -t -s '|'

Cela remplace simplement les onglets par des tuyaux, puis utilise une colonne avec des tuyaux comme délimiteurs.

(Je l'ai fait parce que je n'ai rien vu dans la réponse de Stéphane qui a fonctionné hors de la boîte dans la coquille de poisson. Sinon, la réponse de Stéphane semble bonne.)

4
Aaron Feldman

Pour POSIX, $'...', Connu sous le nom d'échappement ANSI-C, n'est pas défini.

À la place, vous pouvez utiliser $(printf '\t'):

column -t -s "$(printf '\t')"

$(printf '\011') peut être utilisée, car 011 (représentation octale de la décimale 9) est le code ANSI pour un caractère de tabulation horizontale:

column -t -s "$(printf '\011')"

Cependant, voir le commentaire ci-dessous de Stéphane Chazelas pour savoir pourquoi cela peut ne pas être cohérent entre les versions de Shell.

4
Nick Bull

Le -t permet de sélectionner le nombre de colonnes souhaité. Laisser ce champ vierge ne change rien. De plus, vous voulez un espace blanc après le -s alors essayez ceci:

cat myfile | column -s \t

2
lurker