使用 column 工具格式化文本输出

关于 column

在Linux中查看数据文本时总会出现可读性低的问题(比如 /etc/passwd),本文将介绍一个非常实用的工具叫做 column,它可以帮助我们将文本数据以整齐的列格式输出。

column 命令来自包含大量工具的软件包 util-linux,其中的工具涵盖了系统管理、文件操作以及硬件监控多个方面。

基本用法

column 命令的基本语法如下:

column [options] [file ...]

如果没有指定文件,column 会从标准输入(管道符、重定向、直接键盘输入)读取数据。

options:

  • -J: 此选项指定系统以 JSON 格式显示输出。
  • -c: 根据每行允许的总字符数定义输出的宽度。
  • -d: 用于定义不打印标题行。
  • -N: 定义列名,每个名称用逗号(“,”)分隔。
  • -H: 用于隐藏指定的列,使其不显示。
  • -V: 显示版本信息并退出。
  • -h: 显示帮助信息并退出。
  • -s: 定义输出的列分隔符。
  • -t: 用于通过确定列数来创建表格。
  • -R: 用于将特定列中的文本右对齐。
  • -T: 允许系统在必要时截断文本,以便调整列宽,确保列不会变得过宽。
  • -O: 允许用户定义列的显示顺序。
  • -L: 在每行后插入空行。

示例

/etc/passwd 文件是一个包含用户账户信息的系统文件,通常每行的格式如下:

username:x:UID:GID:comment:home_directory:shell

这里的 x 表示加密后的密码已经被存储在 /etc/shadow 中。

我们可以使用 column 命令来格式化 /etc/passwd 文件的内容,使其更易读。

  • 示例1 格式化输出 设定分隔符为:

    $ column -t -s: /etc/passwd
    root             x  0      0      root                        /root              /bin/bash
    daemon           x  1      1      daemon                      /usr/sbin          /usr/sbin/nologin
    bin              x  2      2      bin                         /bin               /usr/sbin/nologin
    sys              x  3      3      sys                         /dev               /usr/sbin/nologin
    sync             x  4      65534  sync                        /bin               /bin/sync
    games            x  5      60     games                       /usr/games         /usr/sbin/nologin
  • 示例2 隐藏特定的列

    $ column -t -s: -H 2,4,5,7 /etc/passwd
    root             0      /root
    daemon           1      /usr/sbin
    bin              2      /bin
    sys              3      /dev
    sync             4      /bin
    games            5      /usr/games
  • 示例3 自定义列名

    $ column -t -s: -N "Username,Password,UID,GID,Comment,Home,Shell" /etc/passwd
    Username         Password  UID    GID    Comment                     Home               Shell
    root             x         0      0      root                        /root              /bin/bash
    daemon           x         1      1      daemon                      /usr/sbin          /usr/sbin/nologin
    bin              x         2      2      bin                         /bin               /usr/sbin/nologin
    sys              x         3      3      sys                         /dev               /usr/sbin/nologin
    sync             x         4      65534  sync                        /bin               /bin/sync
    games            x         5      60     games                       /usr/games         /usr/sbin/nologin
  • 示例4 指定特定列的顺序

    # 效果同 -O "7,1"
    $ column -t -s: -O "7,1,2,3,4,5" -N "Username,Password,UID,GID,Comment,Home,Shell" /etc/passwd
    Shell              Username         Password  UID    GID    Comment                     Home
    /bin/bash          root             x         0      0      root                        /root
    /usr/sbin/nologin  daemon           x         1      1      daemon                      /usr/sbin
    /usr/sbin/nologin  bin              x         2      2      bin                         /bin
    /usr/sbin/nologin  sys              x         3      3      sys                         /dev
    /bin/sync          sync             x         4      65534  sync                        /bin
    /usr/sbin/nologin  games            x         5      60     games                       /usr/games