bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html


1.1 选项说明

cut命令将行按指定的分隔符分割成多列,它的弱点在于不好处理多个分隔符重复的情况,因此经常结合tr的压缩功能。

-b:按字节筛选;
-n:与"-b"选项连用,表示禁止将字节分割开来操作;
-c:按字符筛选;
-f:按字段筛选;
-d:指定字段分隔符,不写-d时的默认字段分隔符为"TAB";因此只能和"-f"选项一起使用。
-s:避免打印不包含分隔符的行;
--complement:补足被选择的字节、字符或字段(反向选择的意思或者说是补集);
--output-delimiter:指定输出分割符;默认为输入分隔符。

假设/tmp/abc.sh中下面所示的内容。注意:第2行到第5行每列不是都以单个空格分隔的,有的地方重复了几个空格,有的地方只有一个空格,也就是说,文本内容不是很规则。并且最后一行完全没有空格。

[root@xuexi tmp]# cat abc.sh
NO Name SubjectID Mark 备注
1  longshuai 001  56 不及格
2  gaoxiaofang  001 60 及格
3  zhangsan 001 50 不及格
4  lisi    001   80 及格
5  wangwu   001   90 及格
djakldj;lajd;sla

下面是cut的示例。

1.2 按字段筛选

在abc.sh中有5个字段。筛选出第二字段name列和第4字段mark列。使用空格作为分隔符。

[root@xuexi tmp]# cut -d" " -f2,4 abc.sh
Name00150djakldj;lajd;sla

可以看到,输出的是乱七八糟的非预期结果。原因就是分隔符空格在分隔的地方重复了多次。所以想要正确显示结果,需要把重复空格处理掉。

可以使用tr工具来压缩连续字符。

[root@xuexi tmp]# cat abc.sh | tr -s " " | cut -d " " -f2,4
Name Mark
longshuai 56
gaoxiaofang 60
zhangsan 50
lisi 80
wangwu 90
djakldj;lajd;sla

但是输出中的最后一行中完全没有定界符的行也输出了,这需要使用-s来取消这样的输出。

[root@xuexi tmp]# cat abc.sh | tr -s " " | cut -d" " -f2,4 -s
Name Mark
longshuai 56
gaoxiaofang 60
zhangsan 50
lisi 80
wangwu 90

1.3 使用--complement

输出除了第2字段和第4字段其余的所有字段。

[root@xuexi tmp]# cat abc.sh | tr -s " " | cut -d" " -f2,4 -s --complement
NO SubjectID 备注
1 001 不及格
2 001 及格
3 001 不及格
4 001 及格
5 001 及格

1.4 按字节或字符分割

英文和阿拉伯数字是单字节字符,中文是双字节字符,甚至是3字节字符。

使用-b来按字节筛选,使用-c按字符分割。

注意,按字节或字符分割时将不能指定-d,因为-d是划分字段的。

[root@xuexi tmp]# cut -b1-3 abc.sh   # 筛选第1-3个字节的内容
NO
1 l
2 g
3 z
4 l
5 w
dja

由于筛选中文,结果中出现乱码。

[root@xuexi tmp]# cut -b20 abc.sh

所以"-b"选项需要结合"-n"选项,以禁止"-b"选项将多字节的字符强行分割导致乱码。

[root@xuexi tmp]# cut -n -b20 abc.sh
a
不
0
及

也可以按字符分隔。

[root@xuexi tmp]# cut -c20 abc.sh
a
不
0
及

1.5 使用--output-delimiter

使用"--output-delimiter"指定输出分隔符。

使用-b或者-c分隔了多段字符时,可以使用--output-delimiter,否则这些多段将拼接在一起。

[root@xuexi tmp]# cut -b3-5,6-8 abc.sh  # 拼接在一起Name
longsh
gaoxia
zhangs
lisi 0
wangwu
akldj;[root@xuexi tmp]# cut -b3-5,6-8 abc.sh --output-delimiter ","   # 逗号分隔多段Na,me
lon,gsh
gao,xia
zha,ngs
lis,i 0
wan,gwu
akl,dj;

1.6 cut中的范围指定

可以使用"N-"、"N-M"和"-M"分别表示每行N字符(或字节或字段)后的所有内容、N-M段内容和M段之前的内容。注意包括N和M的边界。

[root@xuexi tmp]# cut -d" " -f3- abc.sh -s    # 输出第三字段和后面所有的内容
SubjectID Mark 备注
001 56 不及格
001 60 及格
001 50 不及格
001 80 及格
001 90 及格

范围交叉时,不会重复输出。比如-f3-5,4-6,则输出-f3-6。

[root@xuexi tmp]# cut -d" " -f3-5,4-6 abc.sh -s   # 范围交叉
SubjectID Mark 备注
001 56 不及格
001 60 及格
001 50 不及格
001 80 及格
001 90 及格

如果范围顺序无序,则Linux会先对范围排序(升序)再输出。例如-f4-6,2等价于-f2,4-6。

[root@xuexi tmp]# cut -d" " -f4-6,2 abc.sh -s
Name Mark 备注
longshuai 56 不及格
gaoxiaofang 60 及格
zhangsan 50 不及格
lisi 80 及格
wangwu 90 及格

转载于:https://www.cnblogs.com/f-ck-need-u/p/7521357.html

shell脚本--cut命令相关推荐

  1. linux脚本求命令行上整数和,shell脚本--cut命令与awk简单使用

    cut:对内容进行列切割 -d 后面的是分割符,表示用什么符号来分割符来分割列,分隔符使用引号括起来: -f后面跟着要选择的字段列,从1开始,表示第一列,如果要多列,可以用逗号分隔 : -c参数后面跟 ...

  2. python serial 发送ctl+c_[已解决]shell 脚本 给命令发送 Ctrl+C信号

    Signal     Value     Action   Comment ─────────────────────────────────── ────────────────────────── ...

  3. 使用shell脚本或命令行添加、删除 crontab 定时任务

    crontab 是运维过程中常用的定时任务执行工具 一般情况下在有新的定时任务要执行时,使用crontab -e ,将打开一个vi编辑界面,配置好后保存退出,但是在自动化运维的过程中往往需要使用she ...

  4. linux脚本基本命令大全,Shell脚本常用命令

    Shell脚本常用命令 1           Shell中的特殊符号 1.1           $  美元符号.用来表示变量的值.如变量NAME的值为Mike,则使用$NAME就可以得到" ...

  5. shell之cut命令

    shell之cut命令 cut命令 cut的工作就是"剪",具体的说就是在文件中负责剪切数据用的. cut 命令从文件的每一行剪切字节.字符和字段并将这些字节.字符和字段输出 常用 ...

  6. linux——编写Shell脚本常用命令:diff、patch、cut、sort、uniq、、||、test、tr

    diff 和 patch 命令帮助:diff –help | patch –help diff命令在最简单的情况下,比较给定的两个文件的不同.如果使用"-"代替"文件&q ...

  7. shell脚本的命令行传参

    在Linux环境下开发C程序,若想要可选择性的给程序传递外部参数,最后是以启动脚本的形式间接进行传递,这样对于命令行的参数解析工作将集中到shell脚本中,大大增加C代码的可移植性.       sh ...

  8. Linux Shell脚本Ldd命令原理及使用方法

    1.首先ldd不是一个可执行程序,而只是一个shell脚本 2.ldd能够显示可执行模块的dependency,其原理是通过设置一系列的环境变量 如下:LD_TRACE_LOADED_OBJECTS. ...

  9. shell脚本——expect命令

    一.对expect的基本了解 我们通过Shell可以实现简单的控制流功能,如:循环.判断等.但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如telnet服务器等进行交互 ...

最新文章

  1. atomikos mysql,记一次 Atomikos 分布式事务的使用
  2. Vue 中的作用域插槽
  3. GitHub现在已支持函数定义跳转,妈妈再也不怕我记性差了
  4. 一步一步学JVM-垃圾回收器
  5. 帝国cms文章内容tags关键词设置调用方法以及tags静态化
  6. 蓝桥杯2017年第八届C/C++省赛A组第一题-迷宫
  7. paip.数据库发邮件通知配置
  8. 网页游戏服务器端开发心得
  9. Matlab画图技巧: 不需要敲代码的傻瓜式操作流程
  10. Benchmarking of computational error-correction methods for next-generation sequen下一代测序数据的计算纠错方法的基准测试
  11. golang 实现HTTP代理和反向代理
  12. 小程序支付“”商户号该产品权限未开通,请前往商户平台产品中心检查后重试“”解决方案
  13. 01 创建一个二维地图
  14. 宁可编译和链接时出错,也不要运行时出错
  15. 主成分分析 PCA 线性判别分类LDA
  16. 和量子计算有什么区别 并发_到底什么是量子计算?
  17. 关于vSphere vMotion的讨论 -3
  18. 大数据项目离线数仓(全 )二(数仓系统)
  19. EXCEL数据处理相关操作
  20. 4.6、robot framework所有断言操作

热门文章

  1. 实现图书增删的代码_不仅仅是图书信息管理系统
  2. 华北电力大学计算机科学与技术考研,华北电力大学吴克河教授谈计算机科学与技术专业...
  3. 查看docker容器日志
  4. java管道流文件的复制_JavaIO 总结笔记三 基本字节字符输入输出流和文件复制...
  5. 使用福禄克CFP单模光纤测试仪像专家一样设置参数!
  6. 数据库:MySQL高频面试题,大厂必备!
  7. html ajax 数据传送,HTML AJAX 简单数据JS
  8. 交叉编译及树莓派(或其他平台)交叉编译工具链的安装
  9. Linux系统文件编程(1)
  10. Collection 和 Collections区别