Bash Shell提取部分数据

Bash Shell提取部分数据,你想要根据列的位置获取固定宽度或分列数据中的一部分。

解决方案

用带有 -c 选项的 cut 命令提取特定列。

注意,本文中所列举的 ps 命令的例子仅适用于某些系统,如 CentOS-4、Fedora Core 5、Ubuntu,但由于列的位置不同,在 Red Hat 8、NetBSD、Solaris、masOS 中会出现错乱。

$ ps -l | cut -c12-15
PID
5391
7285
7286
$

或者:

$ ps -elf | cut -c58-
(不再显示输出)
$

讨论

使用 cut 命令时,我们需要指定保留每行的哪一部分。在第一个例子中,我们保留第 12 列(从 1 开始计数)到第 15 列(包含在内)。在第二个例子中,我们指定从第 58 列开始,但没有指定结束位置,因此 cut 会一直提取到行尾。

到目前为止,我们看过的大部分数据处理是基于字段,字段之间由分隔符隔开。cut 命令也可以这么做,但它是 bash 中少数也能够轻松处理分列数据的工具之一(通过 -c 选项)。

除了列,cut 也可以输出字段,不过相较于其他工具(如 awk),限制要更多一些。字段之间的默认分隔符是制表符,你也可以用 -d 选项指定其他分隔符。以下是一个处理字段的 cut 命令。

cut -d'#' -f2 < ipaddr.list

与其等价的 awk 命令如下所示。

awk -F'#' '{print $2}' < ipaddr.list

你甚至还可以用多个 cut 来处理不一致的分隔符。使用带有正则表达式的 awk 可能效果更好,不过有时一连串快而糙的 cut 更容易理解和键入。

接下来我们将展示如何提取一对中括号之间的字段。注意,第一个 cut 使用左中括号作为分隔符(-d'['),并提取第 2 个字段(-f2,字段从 1 开始计数)。在此基础上,第二个 cut 使用右中括号作为分隔符(-d']'),并提取第 1 个字段。

$ cat delimited_data
Line [l1].
Line [l2].
Line [l3].

$ cut -d'[' -f2 delimited_data | cut -d']' -f1
l1
l2
l3
$

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!