Linux 下 如何使用 cut 命令

391 阅读2分钟

cut命令是从文件行中按照 字节、字符或字段来提取需要的信息,各个命令选项的使用说明如下

-b 选项

输出文件指定的字节序号的信息,参数可以指定字节序号列表或者指定字节序号范围 ,tab 键和 backspace 键占用一字节

现有用来测试的 a.txt 文件,内容如下:

and ver hao
12      34567 whatsapp
haha yu  j@4567
  • 字节序号列表 下面的例子是输出 a.txt 每行第1,2,3,4 字节处的字符
[tt@ecs-centos-7 ~]$ cut -b 1,2,3,4 a.txt 
and 
12      3
haha
  • 字节序号范围 1、下面的例子是输出 a.txt 每行第1-3,4-10 字节处的的字符
[tt@ecs-centos-7 ~]$ cut -b 1-3,4-10 a.txt 
and ver ha
12      34567 w
haha yu  j

2、每行第1字节到第3字节

[tt@ecs-centos-7 ~]$ cut -b -3 a.txt 
and
12
hah

3、每行第2个字节到结尾字节

[tt@ecs-centos-7 ~]$ cut -b 2- a.txt 
nd ver hao
2       34567 whatsapp
aha yu  j@4567

-c 选项

输出文件指定字符序号信息,参数可以是指定字符序号列表,也可以是指定字符序号范围,这个选项适用于每行长度都是固定的文件

  • 字符序号列表 下面的例子是输出每行第2,3两个字符
[tt@ecs-centos-7 ~]$ cut -c 2,3 a.txt 
nd
2
ah
  • 字符序号范围列表

1、输出第2到第6个字符范围的字符

[tt@ecs-centos-7 ~]$ cut -c 2-6 a.txt 
nd ve
2       345
aha y

2、输出第3到结尾字符范围的字符

[tt@ecs-centos-7 ~]$ cut -c 3- a.txt 
d ver hao
        34567 whatsapp
ha yu  j@4567

3、输出第1到第4个字符范围的字符

[tt@ecs-centos-7 ~]$ cut -c -4 a.txt 
and 
12      3
haha

-f 选项

前面的 -b 和 -c 选项是按照字节或者字符序号的方式来分割文件行的,如果想按照固定 字符 分割每一行的话,就要用到 -d 以及 -f 选项

语法:cut -d "delimiter" -f (field number) a.txt

-d 选项是指定每一行的分隔符,如果没有指定分割服,默认就是tab键

-f 选项是通过 -d 选项分把每一行分割成很多列之后, 提取指定列的数据

1、不使用 -d 选项默认分割符是 tab 键,没有tab 键的行会原样输出,下面的例子第2行有tab,只输出的第二列,其他行都没有tab,所以会原样输出

[tt@ecs-centos-7 ~]$ cut -f 2 a.txt 
and ver hao
34567 whatsapp
haha yu  j@4567

2、使用 -d 选项,下面是以空格作为每行的分割符,下面例子中第二行 12 和 3456之间是 tab 所以它们不会被分割开

[tt@ecs-centos-7 ~]$ cut -d " " -f 1 a.txt 
and
12      34567
haha

3、使用 --output-delimiter='delimiter' 可以作为输出列之间的分隔符,下面的例子中以空格作为行分隔符,以@为输出分隔符

tt@ecs-centos-7 ~]$ cut -d " " -f 1,2 --output-delimiter='@' a.txt 
and@ver
12      34567@whatsapp
haha@yu
[tt@ecs-centos-7 ~]$ 

--v 选项

--v 可以查看当前系统中 cut 命令的版本

tt@ecs-centos-7 ~]$ cut --v
cut (GNU coreutils) 8.22
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by David M. Ihnat, David MacKenzie, and Jim Meyering.

结合管道一起使用

cut 可以和管道一起使用,可以处理更多的任务

有 list.txt 内容如下:

[tt@ecs-centos-7 ~]$ cat list.txt 
any,how,what,where
am,fine,keep,mind
hat,cap,oh,thank
good,hi,dog,animal

现在需要把 list.txt 以逗号为分隔符, 前两行,每行前三列提取出来并写入到 c.txt 中,具体的命令如下:

[tt@ecs-centos-7 ~]$ cat list.txt | head -n 2 | cut -d, -f 1,2,3 > c.txt
[tt@ecs-centos-7 ~]$ cat c.txt 
any,how,what
am,fine,keep

上面的例子中先读取 list.txt,然后通过 head -n 2 命令获取 list.txt 前两行,再执行cut -d, -f 1,2,3把每行按照逗号分隔并输出前三列,最后通过 > 符号把结果重定向到 c.txt 文件中,查看 c.txt 内容,结果正确