Sort
将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
-u 在输出行中去除重复行
-r 改为降序(默认升序)
-o 将排序结果输出到原文件中(sort –r file.txt –o file.txt)
-n 以数值来排序(默认是以字符来排序,比如10比2小)
-t和-k 其中-t后面跟设定的间隔符,若为空格则用单引号将空格括起来,-k来指定列数(以哪一列来排序)
-f 将小写字母都转换为大写字母来进行比较,亦即忽略大小写
-c 检查文件是否排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1
-C 检查文件是否排好序,如果乱序,不输出内容,仅返回1
-M 以月份来排序
-b 忽略每一行前面的所有空白部分,从第一个可见字符开始比较
-I 表示忽略不可打印字符,只针对可打印字符(a,, , 都是不可打印字符)
-k:
可以写多个 -k 数字,在前面的优先级高,前面相同的就按后面的排序
-k 3r 表示第三个域按降序排序
-k 3nr 表示第三个域按降序以数值排序
如果将-n写在最前面,那么后面的域里面不用写n,都是按照以数值排序
-k 1.2 表示对第一个域的第二个字符开始到这个域的最后一个字符为止的字符串进行排序
-k 1.2,1.2 表示只针对第一个域的第二个字符排序
-k 3,3 表示只对本域排序,若没有后面那个3,则变成对第3个域开始到最后一个域位置的内容进行排
-k 1.1,1.1 –u 从第一个域的第一个字符开始,遇到相同的删掉本身后面一个字符靠后的
-k 2 –k 1 –k 3 –u 只要有一个有不同就不会轻易删除,-u会权衡所有-k选项,除非全部相同
Sort认为0小于00小于000小于0000…
-k 2.2,3.1 sort只会比较第二个域的第二个字符到第二个域的最后一个字符的部分,不会把第三个域的开头字符纳入比较范围
Cut
三种定位:-b 字节
-c 字符
-f 域
-b
Who|cut –b 3 提取第3个字节
Who|cut –b 3-5,8 提取第3个,第4个,第5个,第8个字节
其中cut –b 3-5,8与cut –b 8,3-5不同,所有定位会从小到大排序
-b -3表示从第一个字节到第三个字节,而-b 3-表示从第三个字节到行尾,且都包括了第3个字节
-b -3,3-表示输出整行,不会出现连续两个重叠的第3个字节
-c
以字符为单位,可以输出中文
-n用于告诉cut不要将多字节字符拆开 -nb 1,2,3便可以输出一个汉字
-f
cut –d : -f 1 以:为间隔符,提取第1个域
-f 3-5 提取第3个,第4个,第5个域
-f 4- 提取第4个域到最后一个域
Cut的-d选项的默认间隔符就是制表符,省略-d选项代表使用制表符,直接用-f来取域
-d ‘ ‘ 以空格为间隔符,两个引号之间有空格
paste
将不同文件的数据放在一行
格式:
Paste <-d><-s> file1 file2
-d 制定不同于空格或tab键的域分隔符。比如使用@分隔符,就可以-d@。d” ”
-s 将每个文件合并成行,而不是按行合并(每个文件中的内容占一行)
- 使用标准输入
cat a.txt
a
b
c
cat 1.txt
1
2
3
paste a.txt 1.txt
a1
b2
c3
paste –d @ a.txt 1.txt
a@1
b@2
c@3
paste –s a.txt 1.txt
abc
123
#ls
1.txt 2.txt
#ls | paste(默认是一个-,从标准输入读取一个作为一行)
1.txt
2.txt
#ls | paste –
1.txt
2.txt
#ls | paste - -(两个-之间用空格分开,有多少个-,就取多少个作为一行)
1.txt2.txt
Tr
格式:
tr –c –d –s [“string1_to_translate_from”][“string2_to_translate_to”] < input-file
-c 用字符串1中字符集的补集替换此字符集,要求字符集为ASCII
-d 删除字符串1中所有输入字符
-s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串
input-file 是转换文件名
指定字符串1或字符串2的内容时,只能使用单字符或字符串范围或列表
[a-z]a-z内的字符组成的字符串
[A-Z]A-Z内的字符组成的字符串
[0-9]数字串
octal 一个三位的八进制数,对应有效的ASCII字符
[O*n] 表示字符O重复出现指定次数n。因此是匹配OO的字符串
a Ctrl-G 铃声