【Linux】命令 - cut

Posted by 西维蜀黍 on 2019-09-17, Last Modified on 2022-12-10

cut命令

cut 命令对指定文件的内容的每一行进行截断,并将截断后的所有内容(或部分内容)输出到标准输出。

usage: cut -b list [-n] [file ...]
       cut -c list [file ...]
       cut -f list [-s] [-d delim] [file ...]

如果不指定 File,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。

参数:

  • -b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
  • -c :以字符为单位进行分割。
  • -d :自定义分隔符,默认为制表符。
  • -f :与-d一起使用,指定显示哪个区域。
  • -n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的 范围之内,该字符将被写出;否则,该字符将被排除

-b 参数 - 按字节分割

注意:一个空格算一个字节,一个汉字算三个字节

$ date
2011年08月11日 星期四20:44:52 EDT

# 取前四个字节
$ date |cut -b 1-4                
2011

$ date |cut -b 1-6
2011

# 一个汉字算三个字节
$ date |cut -b 1-7           
2011年

$ date |cut -b 1-10
2011年08

-c 参数 - 按字符分割

按字符cut相对比较简单,中文字符和空格都算一个字符。

$ date |cut -c 1-5
2011年

$ date |cut -c 5,9,13
年月日

-d-f 配合使用 - 指定列分隔符,按列分割

其中,-d指定列分隔符,-f 指定要剪出哪几个列(以每行作为一个单元进行切割),

-d选项的默认间隔符就是制表符,所以当你就是要使用制表符的时候,就可以省略 -d 选项,而直接用 -f 来指定需要将哪一部分列输出到标准输出(通过提供域的序号,索引从1开始):

$ cat 1
data11 data12 data13
data21 data22 data22
data31 data32 data33

# 输出每行的列 1 内容(分隔符为“ ”)
$ cat 1 | cut -d " " -f 1
data11
data21
data31

# 输出每行的列 1 和列 2 的内容(分隔符为“ ”)
cat 1 | cut -d " " -f 1,2
data11 data12
data21 data22
data31 data32