web-dev-qa-db-fra.com

Comment formater la sortie de la console en colonnes

J'ai le fichier texte suivant:

[master]$ cat output.txt 
CHAR.L  96.88   -6.75 (-6.49%)
MXP.L   12.62   -1.00 (-7.41%)
NEW.L   7.88    -0.75 (-8.57%)
AGQ.L   17.75   -0.62 (-3.40%)
RMP.L   13.12   -0.38 (-2.75%)
RRR.L   3.35    -0.20 (-5.71%)
RRL.L   7.95    -0.15 (-1.85%)
SOU.L   1.73    -0.10 (-5.22%)
YELL.L  5.47    -0.04 (-0.73%)
AMC.L   9.75    -0.01 (-0.05%)
PLU:USOP    95.40   0.00 (+0%)
BP-.L   452.10  0.95 (+0.21%)
SXX.L   29.00   1.50 (+5.41%)
LLOY.L  26.78   1.64 (+6.52%)
DES.L   23.62   2.25 (+10.34%)
GKP.L   171.62  4.50 (+2.69%)
XEL.L   83.75   5.00 (+6.33%)
BARC.L  190.57  9.80 (+5.43%)
RKH.L   251.62  12.00 (+5.02%)
UKX.L   5529.21 45.44 (+0.83%)

Je voudrais fixer le alignement des colonnes. Évidemment, je peux importer dans un tableur ou autre chose, mais j'aimerais rester dans le terminal.

EDIT: En utilisant expand, je peux obtenir le résultat souhaité sur Ubuntu, mais est-ce le meilleur moyen?

[master]$ cat output.txt | expand -t24
CHAR.L      96.88       -6.75 (-6.49%)
AMC.L       9.75        -0.01 (-0.05%)
PLU:USOP    95.40       0.00 (+0%)
31
ktec

la solution comme la colonne est ce que vous voulez. 

me@home$ column -t output.txt 
    CHAR.L    96.88    -6.75  (-6.49%)
    MXP.L     12.62    -1.00  (-7.41%)
    NEW.L     7.88     -0.75  (-8.57%)
    AGQ.L     17.75    -0.62  (-3.40%)
    RMP.L     13.12    -0.38  (-2.75%)
    RRR.L     3.35     -0.20  (-5.71%)
    RRL.L     7.95     -0.15  (-1.85%)
    SOU.L     1.73     -0.10  (-5.22%)
    YELL.L    5.47     -0.04  (-0.73%)
    AMC.L     9.75     -0.01  (-0.05%)
    PLU:USOP  95.40    0.00   (+0%)
    BP-.L     452.10   0.95   (+0.21%)
    SXX.L     29.00    1.50   (+5.41%)
    LLOY.L    26.78    1.64   (+6.52%)
    DES.L     23.62    2.25   (+10.34%)
    GKP.L     171.62   4.50   (+2.69%)
    XEL.L     83.75    5.00   (+6.33%)
    BARC.L    190.57   9.80   (+5.43%)
    RKH.L     251.62   12.00  (+5.02%)
    UKX.L     5529.21  45.44  (+0.83%)
47
Amos Folarin

Cela pourrait fonctionner pour vous:

pr -tw132 -3 output.txt
CHAR.L  96.88   -6.75 (-6.49%)              SOU.L   1.73    -0.10 (-5.22%)              DES.L   23.62   2.25 (+10.34%)
MXP.L   12.62   -1.00 (-7.41%)              YELL.L  5.47    -0.04 (-0.73%)              GKP.L   171.62  4.50 (+2.69%)
NEW.L   7.88    -0.75 (-8.57%)              AMC.L   9.75    -0.01 (-0.05%)              XEL.L   83.75   5.00 (+6.33%)
AGQ.L   17.75   -0.62 (-3.40%)              PLU:USOP    95.40   0.00 (+0%)              BARC.L  190.57  9.80 (+5.43%)
RMP.L   13.12   -0.38 (-2.75%)              BP-.L   452.10  0.95 (+0.21%)               RKH.L   251.62  12.00 (+5.02%)
RRR.L   3.35    -0.20 (-5.71%)              SXX.L   29.00   1.50 (+5.41%)               UKX.L   5529.21 45.44 (+0.83%)
RRL.L   7.95    -0.15 (-1.85%)              LLOY.L  26.78   1.64 (+6.52%)
10
potong

Trouvé le:

cat output.txt | expand --tabs=14
2
ktec

Ceci imprime votre fichier en trois colonnes à l’aide de awk, puisque c’est ce que vous avez demandé:

cat output.txt | \
  awk -v cols=3 '{printf("%-44s",$0)} NR%cols==0 {print ""} END {print ""}'

MODIFIER:

Si votre sortie utilise systématiquement des tabulations uniques pour séparer des colonnes, alors expand fonctionnera pour vous, comme vous l'avez vu. Bu "awk" est plus adapté à ce type de tâche, car il vous permettra de contrôler plus complètement le formatage. Awk (par défaut) considère que tous les espaces sont des séparateurs de champs ("" et "^ I" et "^ I" sont donc tous des séparateurs de champs simples).

Après la mise à jour de la question, il semble que c’est ce que vous recherchez:

  awk '{ printf("%-10s%8s%8s %s\n", $1, $2, $3, $4); }' < output.txt

Si vous voulez restreindre un peu plus le format, vous pouvez utiliser:

  awk '{ printf("%-10s%8.2f%8.2f %s\n", $1, $2, $3, $4); }' < output.txt

Vous pourriez avoir envie et contrôler le format de la dernière colonne si vous en aviez envie, mais je suppose que c'est le sujet d'une autre question.

1
ghoti

si vous utilisez des données JSON, column-layout vous aidera: https://github.com/75lb/column-layout

0
Lloyd