Подтвердить что ты не робот

Как форматировать вывод консоли в столбцах

У меня есть следующий текстовый файл:

[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%)

Я хотел бы исправить выравнивание столбцов. Очевидно, что я могу импортировать в электронную таблицу или что-то еще, но я хотел бы остаться в терминале.

EDIT: с помощью expand я могу добиться желаемого результата на Ubuntu, но лучший ли это?

[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%)
4b9b3361

Ответ 1

решение вроде колонки - это то, что вы хотите.

[email protected]$ 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%)

Ответ 2

Это может сработать для вас:

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%)

Ответ 3

Найдено:

cat output.txt | expand --tabs=14

Ответ 4

Это печатает ваш файл в трех столбцах с помощью awk, так как об этом вы спрашивали:

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

EDIT:

Если ваш вывод последовательно использует отдельные TAB для разделения столбцов, то вы, как вы видели, будут работать для вас. Бу "awk" больше подходит для такого рода задач, так как это позволит вам полностью контролировать форматирование. Awk (по умолчанию) считает, что все пробелы являются разделителями полей (таким образом, "и" ^ I "и" ^ I" - все разделители отдельных полей).

После обновления вопроса, похоже, это то, что вы ищете:

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

Если вы хотите немного ограничить формат, вы можете использовать:

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

Вы можете получить фантазию и управлять форматом последнего столбца, если хотите, но я подозреваю, что тема другого вопроса.