cut主要用于按列切分文本行,并输出指定的字段,这是类unix系统中常用的文本处理工具。
首先随便去网上找个文本或者列表文件
如果使用cat看文本的话就是这样的
sh-3.2# cat data.csv
Name,Age,City,Salary
Alice,30,New York,70000
Bob,25,Los Angeles,55000
Charlie,35,Chicago,80000
Diana,28,Miami,62000
Evan,40,Boston,95000
Fiona,22,Seattle,48000
George,31,San Francisco,73000
Hannah,29,Austin,68000
Ian,27,Denver,60000
Jane,32,Atlanta,71000
从上面的文本可以看到分隔符是 “,” 所以用-d指定 “,” 的话就能够按照“,”把一行文字分割成4份
但是-d 不直接使用,后面要和-f 等一起配合使用
sh-3.2# cut -d',' data.csv
usage: cut -b list [-n] [file ...]
cut -c list [file ...]
cut -f list [-s] [-w | -d delim] [file ...]
和awk的$1 $2 $3...一样,cut也提供了选取列的功能?
根据上述的数据,要想选出所有的名字的话就要选择第一列
也就是 -f1
sh-3.2# cut -f1 -d',' data.csv
Name
Alice
Bob
Charlie
Diana
Evan
Fiona
George
Hannah
Ian
Jane
注意 -d虽然不能直接使用,但是如果不指定-d 参数的话,就会无视掉逗号
sh-3.2# cut -f1 data.csv
Name,Age,City,Salary
Alice,30,New York,70000
Bob,25,Los Angeles,55000
Charlie,35,Chicago,80000
Diana,28,Miami,62000
Evan,40,Boston,95000
Fiona,22,Seattle,48000
George,31,San Francisco,73000
Hannah,29,Austin,68000
Ian,27,Denver,60000
Jane,32,
还可以提取多列
sh-3.2# cut -d',' -f2-4 data.csv
Age,City,Salary
30,New York,70000
25,Los Angeles,55000
35,Chicago,80000
28,Miami,62000
40,Boston,95000
22,Seattle,48000
31,San Francisco,73000
29,Austin,68000
27,Denver,60000
32,Atlanta,71000
对于每一行,如果想要提取第几到第几个字符的话可以用-c
比如对于每一行,想要第1到第3个字符就行了
sh-3.2# cut -c1-3 data.csv
Nam
Ali
Bob
Cha
Dia
Eva
Fio
Geo
Han
Ian
Jan
这里有个不灵活的地方就是不能用 -c 指定字符范围后 再用-f 指定第几列
在cut中 -c 是单独使用的
也就是说,如果想要截取工资这一列的前三位的信息的话,单单使用cut就不够了
cut -f4 -c1-3 data.csv
甚至上面这种写法还是错的
所以可以用awk配合管道把第4列传输给cut作为行
sh-3.2# awk -F, '{print $4}' data.csv
Salary
70000
55000
80000
62000
95000
48000
73000
68000
60000
71000
然后使用-c 把 从管道传输过来的 “行” 剪切出1-3字符位的部分
sh-3.2# awk -F, '{print $4}' data.csv | cut -c1-3
Sal
700
550
800
620
950
480
730
680
600
710
这样就知道大家工资的前三位了
总的来说cut工具很简单,处理有规律的文本不需要什么正则表达
但是稍微复杂一些的功能就要和其他工具配合使用