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"
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
).
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.)
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.
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