Sort(排序)文本
Sort工作原理就是从每一行作为一个工作单位,进行相互比较,比较的原则是从首字符向后,一次按照ASCII Code进行比较,最后将他们按升序输出:
sort sort.txt
如果希望按照降序排列:使用-r参数
Sort –r sort.txt
Sort默认是输出到标准输出,如果想输出到文件,我们需要进行重定向:
sort -r sort.txt -o sort.txt.bak
如果让排序以数值来排序而不是以字符来排,需要使用-n参数。
sort -n sort.txt
按照字典顺序排序
sort –d sort.txt
忽略大小写排序
sort –f sort.txt
去重复:
sort –usort.txt
但是-u只是对键值有效,对于其他部分就无效了。比如
1 xse
2 Hun
3 hun
1 mk
他依然会去掉整key=1整个记录,只留一条。
关于排序关键字:
-t分隔符 –k分割之后的哪一列
sort -t: -k3 -n /etc/group
按照:分割,然后你去分割后的第三列进行排序。
但是sort命令是不稳定,虽然高效。如果想确保稳定性,需要加上
- stable,但是这样效率没法直接和sort比了,所以需要在平时工作中做一下权衡。
sort -t: -k3 -n --stable /etc/group
文本去重复
Uniq去重复,然后只留下第一条。
他常常用于管道命令,比如sort之后去重复。
参数详解:
-c : 再输出行前面加上每一行在输出文件中出现的次数。
sort -r /tmp/sort.txt | uniq –c
-d :仅显示重复行
sort -r /tmp/sort.txt | uniq -d
-u: 仅显示不重复的行
sort -r /tmp/sort.txt | uniq –u
三:统计文本行数,字数以及字符数
Wc:也适用于管道命令
默认会显示行数,单词数,字符数以及文件path.
wc /etc/passwd
-c 仅显示字符数
wc –c /etc/passwd
-w 仅显示单词个数
wc –w /etc/passwd
-l 仅显示行数
wc –l/etc/passwd
高级应用:
查找某个文件下某个文件的个数
find /etc/ -iname "*.conf" | wc -l
查找某个文件包含某个字符的个数
grep nicky /tmp/Pattern.txt | wc -c
统计多个文件:
Wc /etc/*rc
四:打印和格式化输出
Pr命令可以将文本转换成适合打印的文件,将一个大文件分割成几个页面,然后每一个页面架上标题。
-c10 :表示设置列的个数,不能与-m一起使用
-d:产生2个空格输出
-h : 指定字符串作为页眉,否则将文件名字打印为页眉
-l ;指定每一页行数,如果不指定默认是 66行。
-o:每一行缩进字符位置数目。
-t;不要显示标题
Fmt命令格式化文本:
Fold限制文本宽度:
将超过限定列宽的列加入增列字符后,输出到标准输入设备读取数据。
-w: 指定最大行宽
-b: 按照字节数计算宽度。
五:提取文本的开头和结尾:
Head;提取文件的开头行数,默认是10;
如果想自定义提取的函数需要使用 –数字
head -2 /tmp/sort.txt提取sort.txt文件前2行。
Tail:提取文件的末尾行数:
它刚好是和head相反。
六:字段处理
Cut去除文本字段
有的时候可能遇到这种情况,去除某以通讯录中取出姓名和家庭住址:
Cut被设计用来从一个文本文件或者文本流中提取文本列。
-b:指定字节
-c:指定字符位置:必须紧挨着cut
cut -c 1-20 /etc/address.txt那么前20个字符被截取出来
-f :指定字段的列,如果有多个用,分割
-d :以什么作为分隔
cut -d ':' -f 1,3 /etc/address.txt
以:分隔,cut第一个和第三个字段
Join:连接字段
Linux下的join命令可以连接不同的文件,是的具有相同的key值得记录连接在一起,然后他根据指定的栏位,找到两文件中栏位内容相同的行,将他们合并。
[root@(none) etc]# cat /etc/a.txt
A Link
B Hundon
C kyle
D Single
E Perl
[root@(none) etc]# vi /etc/b.txt
[root@(none) etc]# join /etc/a.txt /etc/b.txt
A Link $1900
B Hundon $200
C kyle $340
D Single $1000
E Perl $500
-a参数
指定join的输出结果和第一个文件记录进行比较,如果其余文件没有这个key,则仅显示第一个文件的记录,-a2就刚好相反。
-e :用指定的字符串来代替空字符串
七:文本替换
使用tr替换字符:
Tr 从标准输入删除或者替换字符,并将结果写入标准输出。
格式 tr str1 str2
Tr{-d | -s} str
功能:转换字符,使用-d删除字符,使用-s标志出去序列。
[root@(none) tmp]# tr 'A-Z' 'a-z' < sort.txt>sort.bak
[root@(none) tmp]# vi sort.bak
Tr命令从标准输入读入,重定向到sort.bat