技术

您所在的位置:网站首页 linux中的cut 技术

技术

2022-05-26 03:40| 来源: 网络整理| 查看: 265

作者: Sylvain Leroux 译者: LCTT FSSlc

| 2018-08-03 23:29   收藏: 3    

cut 命令是用来从文本文件中移除“某些列”的经典工具。在本文中的“一列”可以被定义为按照一行中位置区分的一系列字符串或者字节,或者是以某个分隔符为间隔的某些域。

先前我已经介绍了如何使用 AWK 命令。在本文中,我将解释 linux 下 cut 命令的 4 个本质且实用的例子,有时这些例子将帮你节省很多时间。

Linux 下 cut 命令的 4 个实用示例

假如你想,你可以观看下面的视频,视频中解释了本文中我列举的 cut 命令的使用例子。

https://www.youtube.com/PhE_cFLzVFw 1、 作用在一系列字符上

当启用 -c 命令行选项时,cut 命令将移除一系列字符。

和其他的过滤器类似, cut 命令不会直接改变输入的文件,它将复制已修改的数据到它的标准输出里去。你可以通过重定向命令的结果到一个文件中来保存修改后的结果,或者使用管道将结果送到另一个命令的输入中,这些都由你来负责。

假如你已经下载了上面视频中的示例测试文件,你将看到一个名为 BALANCE.txt 的数据文件,这些数据是直接从我妻子在她工作中使用的某款会计软件中导出的:

sh$ head BALANCE.txt ACCDOC ACCDOCDATE ACCOUNTNUM ACCOUNTLIB ACCDOCLIB DEBIT CREDIT 4 1012017 623477 TIDE SCHEDULE ALNEENRE-4701-LOC 00000001615,00 4 1012017 445452 VAT BS/ENC ALNEENRE-4701-LOC 00000000323,00 4 1012017 4356 PAYABLES ALNEENRE-4701-LOC 00000001938,00 5 1012017 623372 ACCOMODATION GUIDE ALNEENRE-4771-LOC 00000001333,00 5 1012017 445452 VAT BS/ENC ALNEENRE-4771-LOC 00000000266,60 5 1012017 4356 PAYABLES ALNEENRE-4771-LOC 00000001599,60 6 1012017 4356 PAYABLES FACT FA00006253 - BIT QUIROBEN 00000001837,20 6 1012017 445452 VAT BS/ENC FACT FA00006253 - BIT QUIROBEN 00000000306,20 6 1012017 623795 TOURIST GUIDE BOOK FACT FA00006253 - BIT QUIROBEN 00000001531,00

上述文件是一个固定宽度的文本文件,因为对于每一项数据,都使用了不定长的空格做填充,使得它看起来是一个对齐的列表。

这样一来,每一列数据开始和结束的位置都是一致的。从 cut 命令的字面意思去理解会给我们带来一个小陷阱:cut 命令实际上需要你指出你想保留的数据范围,而不是你想移除的范围。所以,假如我只需要上面文件中的 ACCOUNTNUM 和 ACCOUNTLIB 列,我需要这么做:

sh$ cut -c 25-59 BALANCE.txt | head ACCOUNTNUM ACCOUNTLIB 623477 TIDE SCHEDULE 445452 VAT BS/ENC 4356 /accountPAYABLES 623372 ACCOMODATION GUIDE 445452 VAT BS/ENC 4356 PAYABLES 4356 PAYABLES 445452 VAT BS/ENC 623795 TOURIST GUIDE BOOK 范围如何定义?

正如我们上面看到的那样, cut 命令需要我们特别指定需要保留的数据的范围。所以,下面我将更正式地介绍如何定义范围:对于 cut 命令来说,范围是由连字符(-)分隔的起始和结束位置组成,范围是基于 1 计数的,即每行的第一项是从 1 开始计数的,而不是从 0 开始。范围是一个闭区间,开始和结束位置都将包含在结果之中,正如它们之间的所有字符那样。如果范围中的结束位置比起始位置小,则这种表达式是错误的。作为快捷方式,你可以省略起始或结束值,正如下面的表格所示:

范围 含义 a-b a 和 b 之间的范围(闭区间) a 与范围 a-a 等价 -b 与范围 1-a 等价 b- 与范围 b-∞ 等价

cut 命令允许你通过逗号分隔多个范围,下面是一些示例:

# 保留 1 到 24 之间(闭区间)的字符 cut -c -24 BALANCE.txt # 保留 1 到 24(闭区间)以及 36 到 59(闭区间)之间的字符 cut -c -24,36-59 BALANCE.txt # 保留 1 到 24(闭区间)、36 到 59(闭区间)和 93 到该行末尾之间的字符 cut -c -24,36-59,93- BALANCE.txt

cut 命令的一个限制(或者是特性,取决于你如何看待它)是它将 不会对数据进行重排。所以下面的命令和先前的命令将产生相同的结果,尽管范围的顺序做了改变:

cut -c 93-,-24,36-59 BALANCE.txt

你可以轻易地使用 diff 命令来验证:

diff -s


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3