今天来说说cut。我们可能需要按列,而不是按行切分文件。假设我们有一个文本文件,其中按行包含了学生的报表信息。我们需要将学生的姓名或者是第n列提取到另一个文件,也可能需要将其中两列甚至更多。那么就可能用到cut。
cut是一个帮我们将文本按列进行切分的小巧工具。它也可以指定分隔每列的定界符。在cut的术语中,每列称为一个字段。
(1) 要提取特定的字段或列,可以使用下面的语法:
$cut -f FIELD LIST filename
FIELD LIST是需要显示的列。它由列号组成,彼此之间用逗号分隔。例如:
$cut -f 2,3 filename
这条命令将显示第2列和第3列。
举个栗子:比如现在有一个文件,文件内容如下:
要显示第二列和第三列即:
我们也可以用--complement选项对提取的字段进行补集运算。假设有多个字段,你希望打印出除第三列之外的所有列,则可以使用:
$cut -f3 --complement student_data.txt
(2)要指定使用字段的定界符,使用-d选项:
比如碰到上述文件,可以使用-d参数
补充内容:
(1)指定字段的字符或者字节范围
假设我们不依赖定界符,但需要通过将字段定义为一个字符范围(行首为0)来进行字段提取,这种需求也可以使用cut来实现。
用上面介绍的方法,结合下列选项将字段指定为某个范围内的字节或字符:
-b 表示字节;
-c表示字符;
-f用于定义字段。
定义下面文件:
我们可以打印第1个到第5个字符:
$ cut -c1-5 range_fields.txt
也可以打印前两个字符:
若要用字节作为计数单位,可以将-c替换成-b。
在使用-c,-f和-b时,我么可以指定指定输出定界符
--output-delimiter "delimiter string"
当用-b或者-c提取多个字段时,必须使用--output-delimiter,否则,你就没法区分不同的字段了。例如: