功能:
进行列提取(但也需要按行进行数据提取,即先读取文本的一行数据,在行中判断是否有符合条件的字段,然后再处理下一行)
区分:
grep命令是在文件中提取符合条件的行
命令格式:
[root@localhost ~]# cut [选项] 文件名
选项说明:
-f列号:需要提取的列号,如提取第2列,即-f 2
-d分隔符:按照指定分隔符来分隔列,如使用“|”,即-d "|"
默认分隔符为制表符,即Tab键
-c字符范围:不依赖分隔符来区分列,而通过字符范围(行首为0)来进行字段提取。
n-:从第n个字符到行尾,
n-m:从第n个字符到第m个字符
-m:从第1个字符到第m个字符
应用实例:
建立学生表:分隔符为制表符
[root@localhost ~]# vi student.txt
ID Name gender Mark
1 Liming M 86
2 Sc M 90
3 Gao M 83
使用cut命令:提取第二列的内容
[root@localhost ~]# cut -f 2 student.txt
Name
Liming
Sc
Gao
提取多列内容:将列号直接用","隔开
[root@localhost ~]# cut -f 2,3 student.txt
#提取第二列和第三列的内容
Name gender
Liming M
Sc M
Gao M
cut命令按照字符进行提取:
[root@localhost ~]#cut -c 8- student.txt
#提取取每行从第8个字符到行尾,好像很乱啊,那是因为每行的字符个数不相等
gender Mark
g M 86
90
83
#说明:
"8-":提取所有行从第 8 个字符到行尾;
"10-20":提取所有行的第 10~20 个字符;
"-8":提取所有行从行首到第 8 个字符
cut指定分隔符:如以":"为分隔符
[root@localhost ~]# cut -d ":" -f 1,3 /etc/passwd
#以":"作为分隔符,提取/etc/passwd文件的第一列和第三列
root:0
bin:1
daemon:2
adm:3
lp:4
cut命令存在的问题:
对空格识别能力不好,遇到以空格分隔数据的文件时会出问题。如果需要将空格符作为分隔符,建议使用awk命令。
举例:使用df命令列出分区使用情况,使用cut命令截取第一列和第三列,会出现第三列内容不显示
[root@localhost ~]# df
#统计分区使用状况
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda3 19923216 1848936 17062212 10% /
tmpfs 312672 0 312672 0% /dev/shm
/dev/sda1 198337 26359 161738 15% /boot
/dev/srO 3626176 3626176 0 100% /mnt/cdrom
从输出结果可以发现第三列信息并没有成功输出,因为df命令输出的信息的分隔符是多个空格,cut命令会将每个空格当做一个分隔符,所以第三列恰好是空格。
[root@localhost ~]# df -h|cut -d " "-f 1,3
#df -h列出分区情况,并指定分隔符“ ”,提取第1列和第三列
文件系统
/dev/sda3
tmpfs
/dev/sda1
/dev/sr0