在 Linux 中使用 Column 命令的不同方法

您是否曾经处理过 CSV 文件并以结构化表格格式生成输出?最近,我正在对一个结构不正确的文件进行数据清理。每列之间有很多空格,我必须将其转换为 CSV 格式才能推送到数据库。清理并创建 CSV 格式的输出后,我的输出在视觉上不足以验证 CSV 文件中的数据完整性。这时候“Column”命令就派上用场了。

根据联机帮助页,柱子命令 ”列列表”。简单来说,柱子是一个简单的实用程序,可以将您的输出格式化为柱子基于源文件结构的格式(行和字段)。这柱子命令是 util-linux 包的一部分。

这里需要注意的重要一点是柱子命令的行为有所不同和。原因是基于 Debian 的发行版使用“柱子“ 从bsdmainutils而不是 util-linux。上游版本柱子命令比bsdmainutils包裹。看看错误报告了解更多相关信息。

$ dpkg -S $(which column)
哪一栏

出于演示目的,我使用操作系统7并会显示之间的不同选项乌班图和操作系统7。要检查柱子版本运行以下命令。该命令还将显示实用程序Linux包版本。

$ column --version  # will not work in Debian/ubuntu

您还可以通过运行以下命令来检查 util-linux 的版本。

$ rpm -qa | grep -i util-linux   # Redhat,Centos,Fedora,Amazon Linux
$ dpkg -l | grep -i util-linux    # Ubuntu

使用前柱子命令的一个很好的起点是手册页并探索其选项。

$ man column

以表格格式列出文件内容

这柱子命令可以作为一个论点以及-t旗帜。我正在使用/etc/密码作为输入文件。

$ column -t /etc/passwd
以表格格式列出文件内容

看到上图,您可能会认为这不是我们所期望的,并且输出可能看起来很奇怪。是的!你是对的。专栏考虑空格作为默认分隔符创建表时。可以通过传递自定义分隔符来覆盖此行为。

定制深度计

自定义分隔符为您提供了广泛的使用选项。要创建自定义分隔符,请使用-s标志后跟一个分隔符。现在我们将使用“:”作为分割的分隔符/etc/密码文件。

$ column -s ":"  -t /etc/passwd
分隔符

看上图,表格的格式和结构都很好。从实用程序li​​nux2.23版本选项-s已改为不贪心。

现在运行相同的命令乌班图结果将是贪婪的。这是因为柱子命令 (bsdmainutils) 在乌班图会将多个相邻单词视为单个单词。

$ column -s ":"  -t /etc/passwd
贪婪输出

为了克服这种行为,请使用-n旗帜。

$ column -t -s ":" -n /etc/passwd             # Only on Debian/Ubuntu
非贪婪输出

忽略文件输出中的白色空行

当输入文件中有空行时,column 命令默认会忽略它。查看我的 CSV 格式的输入文件,我在每行之间添加了一个空行。现在让我们像之前一样使用此输入文件创建一个表。

$ column -t -s ";" dummy.txt
忽略空 while 行

从上图中你可以看到我的输入文件虚拟.txt有空行,当我尝试创建表时,空行将被忽略。

笔记:这是“bsdmainutils/util-linux” 的变体柱子命令。但柱子(bsdmainutils) 可以选择通过传递来覆盖此行为-e旗帜。

$ column -e -t -s "," dummy.txt        # Only on Debian/Ubuntu
文件白线

从上图中,您可以看到表格格式正确,并且空行没有被忽略。

文件输出分隔符

默认情况下,两个空格将用作输出分隔符。可以通过传递来覆盖此行为-o旗帜。您将没有可用的输出分隔符选项柱子(bsdmainutils)。

$ column -t -s "," -o "||" dummy.txt	# Only on Rhel based distro
文件输出分隔符

将文件行转换为列

使用-x您可以将行转换为列的标志。此行为在两个中都是相同的雷尔和乌班图列命令的变体。当您必须通过以下方式获取某个字段时,这是一个非常有用的功能或 column 命令,然后将其转换为 CSV 文件的标题。

$ column -x fillcols.txt
将文件行转换为列

当你运行柱子命令不使用任何标志的行为将与传递相同-x旗帜。

查找列大小

这柱子使用环境变量($COLUMNS)要找出您的终端的大小,并根据大小使用,表格大小将显示在终端中。

$ echo $COLUMNS

看看下面的图片。最初,我调整了终端的大小$COLUMNS大小设置为60并运行列命令。我再次调整了终端的大小$COLUMNS大小设置为114并再次运行列命令。当我们调整终端大小时,您可以看到列打印表格的方式有所不同。

$ column -t -s ":" /etc/passwd | head 5
调整列大小

这就是本文的内容。如果您有任何反馈,请在评论部分提供。