【问题标题】:How to format console output in columns如何在列中格式化控制台输出
【发布时间】:2023-03-28 06:37:01
【问题描述】:

我有以下文本文件:

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

我想修正列的对齐。 显然我可以导入电子表格或其他东西,但我想留在终端内。

编辑:使用 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%)

【问题讨论】:

  • 您到底在寻找什么?
  • “expand”命令仅适用于选项卡。在我的测试(下)中它对我不起作用,因为当我剪切并粘贴您的示例数据时,我在“CHAR.L”之后有两个空格,在“MXL.L”之后有三个空格。请参阅下文,详细了解如何使用 AWK 来做您想做的事情。

标签: linux terminal awk


【解决方案1】:

找到了:

cat output.txt | expand --tabs=14

【讨论】:

  • expand 命令在 Linux 中只需要一个“--tabs”选项。在 FreeBSD 中,您必须使用“-t”选项。另外,您确定此解决方案吗?使用您的数据,这对我不起作用。
  • 这很有趣,它在 Ubuntu 下完美运行!如果增加尺寸呢?
  • jørgensen 的评论(被拒绝编辑): 你可以删掉cat 的无用用法。只需运行:expand --tabs=14 <output.txt
  • 我个人讨厌“无用的 cat”,因为我可能会通过几十个与问题无关的 shell 命令到达我想使用“expand --tabs=14”的地方管他呢。使用“cat file | expand| grep | awk | sort”更改管道顺序比使用“expand 让每个程序做好一件事。 cat 做好一件事。
【解决方案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%)

【讨论】:

  • 谢谢,但这仍然有列未对齐,这是我要解决的问题。
  • 没有帮助 OP,但正是我需要的,谢谢!
【解决方案3】:

这会使用 awk 将您的文件打印在三列中,因为这是您所询问的:

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

编辑:

如您所见,如果您的输出始终使用单个 TAB 来分隔列,那么 expand 将适合您。 Bu "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

如果您愿意,您可以花哨并控制最后一列的格式,但我怀疑这是另一个问题的主题。

【讨论】:

  • 我已经尝试过了,它只给了我三列,我可以通过使用 pr 获得。我想要的是修复列的对齐方式。
  • 哦,我从您的描述预编辑中得到的印象是,这就是您想要的。我将在编辑中添加替代方案。
【解决方案4】:

您可以使用column 命令:

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

【讨论】:

  • 为了工作得更好或更少,我必须这样做:ls -1 |column -c `tput cols` |column -t(ls -1 只是一个简单的 1 列长项目列表的替代品)
  • 很好,我的文件也必须使用-s '&lt;tab&gt;'。 (用^V 输入标签,然后用 Tab。)
【解决方案5】:

如果您正在处理 JSON 数据,column-layout 会有所帮助:https://github.com/75lb/column-layout

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 2021-12-02
    相关资源
    最近更新 更多