shell之sort,uniq,cut,tr
# sort主要是要理解域
# sort选项
-c 测试文件是否已经分类
-m 合并两个分类文件
-u 删除所有复制行
-o 存储sort结果的输出文件名
-b 使用域进行分类时,忽略第一个空格
-n 指定分类是域上的数字分类
-t 域分隔符;用非空格或tab键分隔域
-r 对分类次序或比较求逆,意思就是将得到的结果倒序排序
-k 指定分类键(域)
post1 传递到m,n。m为域号,n为开始分类字符数;例如4,6意即以第5域分类,从第7个字符开始
# sort对域的参照方式
关于sort的一个重要事实是它参照第一个域作为域0,域1是第二个域,等等。sort也可以使用整行作为分类依据。
# 示例,将/etc/passwd文件按第三域(域2)分类
因为第三域是数值,所以分类时候要加上n
sort -t: -k 3n /etc/passwd
# 指定分类键次序,先以第4域,在以第一域分类并求逆
sort -t: -r -k4 -k1 /etc/passwd
# uniq用法
unip用来从一个文本文件中去除或禁止重复行。一般uniq假定文件已分类,并且结果正确。我们并不强制要求这样做,如果愿意,可以使用任何非排序文本,甚至是无规律行。可以认为uniq有点像sort命令中唯一性选项。对,在某种程序上讲正是如此,但两者又一个重要区别。sort的唯一性选项去除所有重复行,而uniq命令并不这样做。重复行是什么?在uniq里意即持续不断重复出现的行,中间不夹杂任何其它文本,示例
>>> cat myfile.txt
May Day
May Day
May Day
Going Down
May Day
uniq将前三个May Day看作重复副本,但是因为第4行有不同的文本,故不认为第五行持续的May Day为其副本。uniq将保留这一行
# 命令格式
uniq -u d c -f inputfile outputfile
-u 只显示不重复行
-d 只显示有重复数据行,每种重复行只显示其中一行
-c 打印每一重复行出现次数
-n n为数字,前n个域被忽略
# cut用法
cut用来从标准输入或文本文件中剪切列或域。剪切文本可以将之粘贴到一个文本文件。
## 命令格式
cut [options] file1 file2
## 选项
-c list 指定剪切字符数
-f field 指定剪切域数
-d 指定与空格和tab键不同的域分隔符
-c 用来指定剪切范围,如:-c1, 5-7剪切第一个字符,然后是第5到第7给字符。-c1-50剪切前50个字符
-f 格式与-c相同
-f1, 5剪切第1域,第5域
-f1, 10-12 剪切第1域,第10域到第12域
# 示例使用域分隔符,以冒号为分隔域,并剪切第3域
cut -d: -f3 /etc/passwd
# tr用来从标准输入中通过替换或删除操作进行字符转换。tr主要用于删除文件中控制字符或进行字符转换。使用tr时要转换两个字符串:字符串1用于查询,字符串2用于处理各种转换。tr刚执行时,字符串1中的字符被映射到字符串2中的字符,然后转换操作开始
# 选项
-c 用字符串1中字符集的补集替换此字符集,要求字符集为ASCII
-d 删除字符串1中所有输入字符
-s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串
# 去除重复出现的字符
tr -s "[a=z]"< /etc/passwd
# 删除空行
tr -s "[\012]" < plane.txt
tf -s ["\n"] < plane.txt
-------------------------------------------
个性签名:代码过万,键盘敲烂!!!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!