Linux-文本处理

Linux 下文本的处理

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

猜你喜欢

转载自nicky19870612.iteye.com/blog/1999011
今日推荐