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
Name 001
50 djakldj;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 及格

shell脚本--cut命令的更多相关文章

  1. shell脚本--cut命令与awk简单使用

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

  2. linux 执行远程linux上的shell脚本或者命令以及scp 上传文件到ftp--免密码登陆

    场景:在linux A 上执行Linux B上的shell脚本和命令 步骤1.设置ssh免登陆 1.SSH无密码登录 # 本地服务器执行(A机器):生成密钥对 ssh-keygen -t dsa -P ...

  3. shell 脚本控制命令的执行顺序

    &&,||,(),{},& 五个符号的运用shell脚本执行命令的时候,有时候会依赖于前一个命令是否执行成功.而&&和||就是用来判断前一个命令执行效果的. 也 ...

  4. 用 shell 脚本做命令行工具扩展

    问题的提出 公司开发机与远程服务器之间有严格的隔离策略,不能直接使用 ssh 登录,而必需通过跳板机.这样一来,本地与服务器之间的一些文件传输变得非常不便.经过咨询,运维教了我一招: $ nc -l ...

  5. Linux之Shell脚本计算命令行的所有和

    问题:设计一个Shell脚本:求命令行上所有整数和 Shell代码: 调用add.sh脚本结果:

  6. Makefile Shell 脚本;sed命令

    1. 在Makefile中想使用shell脚本,需要添加"@"符号,例如: @if [ -d xxx ]; then \                        //-d 判 ...

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

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

  8. Shell 脚本常用命令

    Shell脚本是Linux开发工作中常用的工具,但是我一直没有找到一个适合自己的简明扼要的HandBook.在工作过程中整理了一下,贴在这里已备查看. 1           Shell中的特殊符号 ...

  9. linux shell脚本、命令学习

    1,echo "test" > test.txt    输出重定向到text.txt,文件不存在就创建 echo "test" >> test ...

随机推荐

  1. HDU 4609 3-idiots (组合数学 + FFT)

    题意:给定 n 条边,问随机选出 3 条边,能组成三角形的概率是多少. 析:答案很明显就是  能组成三角形的种数 / (C(n, 3)).现在的问题是怎么求能组成三角形的种数. 这个博客说的非常清楚了 ...

  2. PowerShell工作流学习-7-编写脚本工作流帮助

    关键点: a)工作流中不支持基于注释的帮助(标识工作流的帮助文件的 .ExternalHelp 注释除外). b)支持get-help参数的方式:使用 .ExternalHelp 注释以便 Get-H ...

  3. BAT:通过连接符处理判断OR的关系

    使用情况说明: 适用于对某个文件夹下不同的文件夹(名称)做不同的处理,但存在需要对其中多个文件夹(名称)进行相同处理的情况 例子中的目录结构: .\1.2.3 -- 文件夹.\a.b.c -- 文件夹 ...

  4. 时序扩展的UML状态图的测试用例生成研究

    一.基本信息 标题:时序扩展的UML状态图的测试用例生成研究 时间:2014 出版源:西南大学 领域分类:时序扩展:UML状态图:测试用例:需求规格说明:模型 二.研究背景 问题定义:时序扩展的UML ...

  5. Robust Influence Maximization

    一.   研究背景 在社会和经济网络中,影响最大化问题在过去十年中得到广泛的研究,由于其广泛应用于病毒式营销[1,2],突破检测[3],谣言监测[4]等.例如公司可以通过向初始用户(称为种子)发送免费 ...

  6. android 图形图像

    Canvas 画布 paint 画笔 Path 路径Path代表任意多条直线连接而成的任意图形,当Canvas根据Path绘制时,它可以绘制出任意的形状 使用 Matrix 控制图像或组件变换步骤:① ...

  7. JS获取对象数据类型的方法

    1.typeof: 语法:typeof 对象 或者 typeof(对象) 返回对象的数据类型:只有原始数据类型:boolean number string undefined function obj ...

  8. 【转载】ARCHIVE_LAG_TARGET参数的作用(定时切换redo)

    (一)  设置archive_lag_target参数1.      一旦设置了archive_lag_target初始化参数,数据库将会周期性的检查实例的当前重做日志.如果遇到下列情况,实例将会切换 ...

  9. 关于Nginx设置端口号,在Asp.net 获取不到的,解决办法

    不知道你有没有遇到过这样的问题,网站访客多起来后,心里很是高兴,加上了Nginx反向代理,出问题了 原来是这么写的: Request.Url.ToString() 输出是这样的: http://www ...

  10. Hystrix 配置参数全解析

    code[class*="language-"], pre[class*="language-"] { background-color: #fdfdfd; - ...