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

关于 column

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

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

基本用法

column 命令的基本语法如下:

1
column [options] [file ...]

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

options:

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

示例

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

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

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

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

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

    1
    2
    3
    4
    5
    6
    7
    $ 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 隐藏特定的列

    1
    2
    3
    4
    5
    6
    7
    $ 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 自定义列名

    1
    2
    3
    4
    5
    6
    7
    8
    $ 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 指定特定列的顺序

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 效果同 -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