Linux cut命令
cut命令可以抽取某个文件每一行的特定列信息,类似UE里的列模式
主要选项:
-b 以字节为单位
-c 以字符为单位
-f 默认以TAB为分割符,将行分割成域,以域为单位,可以通过指定参数-d来自定义分隔符,如果该行没有符合的分隔符则打印该整行。
具体要选择哪些列信息,有四种基本的格式:
N:第N个单位
N-:第N个单位到最后一个单位
N-M:第N个单位到第M个单位
-M:从第一个单位到第M个单位
这四种基本形式也可以进行组合(以逗号分隔),例如
1,2,4:代表要截取第1个,第2个和第4个单位
1,2-4:代表要截取第一个和2到4个单位
举例:
样例文件:
[root@demo test]# cat employee.txt 101,John Doe,CEO 102,Jason Smith,IT Manager 103,Raj Reddy,Sysadmin 104,Anand Ram,Developer 105,Jane Miller,Sales Manager
例1:截取前三个字节
[root@demo test]# cut -b1-3 employee.txt 101 102 103 104 105
例2:该文件每行以逗号分隔,可以提取员工的ID和职位
[root@demo test]# cut -d"," -f1,3 employee.txt 101,CEO 102,IT Manager 103,Sysadmin 104,Developer 105,Sales Manager
如果输出不想使用逗号作为分隔符使用使用—output参数,自定义输出分隔符
例3:以冒号作为输出的分隔符
[root@demo test]# cut -d "," -f1,3 --output ":" employee.txt 101:CEO 102:IT Manager 103:Sysadmin 104:Developer 105:Sales Manager
前面说过如果某一个行没有指定的分隔符会打印整行,如果你不想显示该行可以使用-s参数
首先在样例文件的最后追加一行:
abc
重新执行例3的命令:
[root@demo test]# cut -d "," -f1,3 --output ":" employee.txt 101:CEO 102:IT Manager 103:Sysadmin 104:Developer 105:Sales Manager abc
发现最后一行被打印出来了
例4:使用-s屏蔽没有指定分隔符的行
[root@demo test]# cut -d "," -f1,3 --output ":" -s employee.txt 101:CEO 102:IT Manager 103:Sysadmin 104:Developer 105:Sales Manager
如果对剩下的行数据感兴趣可以使用—complement,类似于取反的操作
例5:删除第2个域,保留其他的信息
[root@demo test]# cut -d "," -f2 --output ":" -s --complement employee.txt 101:CEO 102:IT Manager 103:Sysadmin 104:Developer 105:Sales Manager