5.2 linux基础重要命令之基本文本处理:pr/sort/wc/cut/paste/join/tr /comm/diff

 

[root@localhost ~]# cat > demo1.txt
1 2 3 4 5
hello world!
[root@localhost ~]# rev demo1.txt  //反转字符顺序
5 4 3 2 1
!dlrow olleh

 

[root@localhost ~]# pr demo1.txt  //格式化文本页


2017-07-21 09:55 demo1.txt 第 1 页


1 2 3 4 5
hello world!

[root@localhost ~]# cat demo5.txt
Toy_Story HK 239 3972
The_Hill KL 63 2972
Star_Wars HK 301 4102
Boys_In_Company_C HK 192 2192
Aliens HK 532 4892
Alien HK 119 1982
A_Few_Good_Men KL 445 5851
[root@localhost ~]# sort demo5.txt  //默认将整个文本行作为关键字进行排序,依次按照第一列、第二列等
A_Few_Good_Men KL 445 5851
Alien HK 119 1982
Aliens HK 532 4892
Boys_In_Company_C HK 192 2192
Star_Wars HK 301 4102
The_Hill KL 63 2972
Toy_Story HK 239 3972

[root@localhost ~]# sort -k 3 demo5.txt
Alien HK 119 1982
Boys_In_Company_C HK 192 2192
Toy_Story HK 239 3972
Star_Wars HK 301 4102
A_Few_Good_Men KL 445 5851
Aliens HK 532 4892
The_Hill KL 63 2972
[root@localhost ~]# sort -k 2,3 demo5.txt

//使用单个关键字排序;-k 定义排序关键字:列数,每一个列的字符的ASCII码值依次比较
Alien HK 119 1982
Boys_In_Company_C HK 192 2192
Toy_Story HK 239 3972
Star_Wars HK 301 4102
Aliens HK 532 4892
A_Few_Good_Men KL 445 5851
The_Hill KL 63 2972

[root@localhost ~]# sort -r -k 3 demo5.txt //-r 颠倒排序结果
The_Hill KL 63 2972
Aliens HK 532 4892
A_Few_Good_Men KL 445 5851
Star_Wars HK 301 4102
Toy_Story HK 239 3972
Boys_In_Company_C HK 192 2192
Alien HK 119 1982

[root@localhost ~]# sort -k 2,3 demo5.txt //根据指定的列排序;
Alien HK 119 1982
Boys_In_Company_C HK 192 2192
Toy_Story HK 239 3972
Star_Wars HK 301 4102
Aliens HK 532 4892
A_Few_Good_Men KL 445 5851
The_Hill KL 63 2972

[root@localhost ~]# sort -r -k 2,3 demo5.txt //根据关键字降序排列;
The_Hill KL 63 2972
A_Few_Good_Men KL 445 5851
Aliens HK 532 4892
Star_Wars HK 301 4102
Toy_Story HK 239 3972
Boys_In_Company_C HK 192 2192
Alien HK 119 1982

[root@localhost ~]# sort -n -k 3,3 demo5.txt  //数值列的排序;指定第3列数值排序
The_Hill KL 63 2972
Alien HK 119 1982
Boys_In_Company_C HK 192 2192
Toy_Story HK 239 3972
Star_Wars HK 301 4102
A_Few_Good_Men KL 445 5851
Aliens HK 532 4892

[root@localhost ~]# sort -t : -k 3n,3 /etc/passwd  //自定义列分隔符;-t 指定字段分隔符;-k 指定定义排序关键字;-n 等价于这;根据第3列排序
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt

[root@localhost ~]# sort -u demo5.txt //-u 删除重复的行
A_Few_Good_Men KL 445 5851
Alien HK 119 1982
Aliens HK 532 4892
Boys_In_Company_C HK 192 2192
Star_Wars HK 301 4102
The_Hill KL 63 2972
Toy_Story HK 239 3972

[root@localhost ~]# sort -k 3,3nr -k 4,4n demo5.txt  //-k 根据多个关键字排序
Aliens HK 532 4892
Aliens HK 532 4892
A_Few_Good_Men KL 445 5851
Star_Wars HK 301 4102
Toy_Story HK 239 3972
Boys_In_Company_C HK 192 2192
Boys_In_Company_C HK 192 2192
Alien HK 119 1982
The_Hill KL 63 2972

[root@localhost ~]# sort -u demo5.txt > demo6.txt  //以下使用sort命令合并文件
[root@localhost ~]# cat demo6.txt
A_Few_Good_Men KL 445 5851
Alien HK 119 1982
Aliens HK 532 4892
Boys_In_Company_C HK 192 2192
Star_Wars HK 301 4102
The_Hill KL 63 2972
Toy_Story HK 239 3972
[root@localhost ~]# sort demo5.txt demo6.txt > demo56.txt //

[root@localhost ~]# cat demo56.txt
A_Few_Good_Men KL 445 5851
A_Few_Good_Men KL 445 5851
Alien HK 119 1982
Alien HK 119 1982
Aliens HK 532 4892
Aliens HK 532 4892
Aliens HK 532 4892
Boys_In_Company_C HK 192 2192
Boys_In_Company_C HK 192 2192
Boys_In_Company_C HK 192 2192
Star_Wars HK 301 4102
Star_Wars HK 301 4102
The_Hill KL 63 2972
The_Hill KL 63 2972
Toy_Story HK 239 3972
Toy_Story HK 239 3972

[root@localhost ~]# sort -u demo5.txt demo6.txt > demo56.txt  //去掉重复后的合并

[root@localhost ~]# sort -m demo5.txt demo6.txt > demo56.txt //原样合并

 

//文本的统计:

[root@localhost ~]# cat demo5.txt -n  //
1 Toy_Story HK 239 3972
2 The_Hill KL 63 2972
3 Star_Wars HK 301 4102
4 Boys_In_Company_C HK 192 2192
5 Aliens HK 532 4892
6 Alien HK 119 1982
7 A_Few_Good_Men KL 445 5851
8 Boys_In_Company_C HK 192 2192
9 Aliens HK 532 4892
[root@localhost ~]# nl demo5.txt //
1 Toy_Story HK 239 3972
2 The_Hill KL 63 2972
3 Star_Wars HK 301 4102
4 Boys_In_Company_C HK 192 2192
5 Aliens HK 532 4892
6 Alien HK 119 1982
7 A_Few_Good_Men KL 445 5851
8 Boys_In_Company_C HK 192 2192
9 Aliens HK 532 4892

[root@localhost ~]# cat demo5.txt -n  //-n 显示行号
1 Toy_Story HK 239 3972
2 The_Hill KL 63 2972
3 Star_Wars HK 301 4102
4 Boys_In_Company_C HK 192 2192
5 Aliens HK 532 4892
6 Alien HK 119 1982
7 A_Few_Good_Men KL 445 5851
8 Boys_In_Company_C HK 192 2192
9 Aliens HK 532 4892
[root@localhost ~]# wc -l demo5.txt // -l 统计行数
9 demo5.txt
[root@localhost ~]# find /etc/ -name "*.conf" |wc -l  //统计符合要求的文件数
425

[root@localhost ~]# cat demo5.txt |wc -l  //行数
9
[root@localhost ~]# cat demo5.txt |wc -c //字节数
217
[root@localhost ~]# cat demo5.txt |wc -m //字符数
217
[root@localhost ~]# cat demo5.txt |wc -L //最长行的长度
44
[root@localhost ~]# cat demo5.txt |wc -w  //单词数
36

[root@localhost ~]# grep "2017" time.txt
2017年 07月 21日 星期五 14:29:53 CST
2017年 07月 21日 星期五 14:30:14 CST
2017年 07月 21日 星期五 14:30:15 CST
2017年 07月 21日 星期五 14:30:15 CST
[root@localhost ~]# grep -c "2017" time.txt //-c 统计筛选符合的文本行的行数
4

//cut 命令选取文本列,是从垂直方向上对文本进行操作:

[root@localhost ~]# cut -d ":" -f 1,6 demo.txt //-d 自定义列分隔符;-f 选择指定的文本中的列数,多数列用,隔开。
root:/root
bin:/bin
daemon:/sbin

[root@localhost ~]# cut -d ":" -f 1-4 demo.txt //选择1到4列
root:x:0:0
bin:x:1:1
daemon:x:2:2
adm:x:3:4

[root@localhost ~]# cut -c 1-3,5 demo.txt //-c 只选择指定的字符,后面数字代表要选择的范围
roo:
binx
daeo
admx

//paste  //功能与cut 命令相反,主要将某些文件的文本行并行的链接在一起成为一个新的文件。

[root@localhost ~]# cat scores.txt numbers.txt
Toy_Story HK 239 3972
The_Hill KL 63 2972
Star_Wars HK 301 4102
Boys_In_Company_C HK 192 2192
Aliens HK 532 4892
Alien HK 119 1982
A_Few_Good_Men KL 445 5851
100421101
100421102
100421103
100421104
100421105
100421106
100421107
[root@localhost ~]# paste scores.txt numbers.txt >contactinfo.txt //paste命令拼接文本列
[root@localhost ~]# cat contactinfo.txt
Toy_Story HK       239 3972 100421101
The_Hill KL          63    2972 100421102
Star_Wars HK        301  4102 100421103
Boys_In_Company_C HK  192   2192 100421104
Aliens HK         532  4892 100421105
Alien HK             119  1982 100421106
A_Few_Good_Men KL      445  5851 100421107

[root@localhost ~]# paste -d ":" scores.txt numbers.txt >contactinfo.txt //-d 指定拼接结果中列分隔符
[root@localhost ~]# cat contactinfo.txt
Toy_Story HK       239 3972:100421101
The_Hill KL          63 2972:100421102
Star_Wars HK        301 4102:100421103
Boys_In_Company_C HK  192 2192:100421104
Aliens HK           532 4892:100421105
Alien HK            119 1982:100421106
A_Few_Good_Men KL      445 5851:100421107

[root@localhost ~]# cut -f 1 scores.txt >scores.tmp
[root@localhost ~]# cut -f 1 numbers.txt >numbers.tmp
[root@localhost ~]# paste -d ":" scores.tmp numbers.tmp >contactinfo.tmp //-f  指定拼接的列
[root@localhost ~]# cat contactinfo.tmp
Toy_Story:100421101
The_Hill:100421102
Star_Wars:100421103
Boys_In_Company_C:100421104
Aliens:100421105
Alien:100421106
A_Few_Good_Men:100421107

//join 可基于某个关键字进行联接

//tr translate 批量替换或者删除指定的字符。

[root@localhost ~]# cat demo9.txt
Windows RT is a new Windows-based operating systemmmmmmmmmmm that's optimized for thin and ligggggggggggggggggggggggggght PCs that have extended battery life and are designed for life on the go.
[root@localhost ~]# cat demo9.txt|tr -s "[a-z]" //-s 压缩重复的字符,指定字符集[a-z];删除多余的重复字符
Windows RT is a new Windows-based operating system that's optimized for thin and light PCs that have extended batery life and are designed for life on the go.

 

[root@localhost ~]# cat >demo10.txt
hello world!

I love linux.

[root@localhost ~]# cat demo10.txt |tr -s "["\n"]"
hello world!

I love linux.

[root@localhost ~]# cat demo10.txt |tr -s ["\n"]  //删除空行

[root@localhost ~]# cat demo10.txt |tr -s  "\n"  //

[root@localhost ~]# cat demo10.txt |tr -s ["\012"] //换行符也可用八进制“\012”
hello world!
I love linux.

[root@localhost ~]# ls *.txt
contactinfo2.txt demo10.txt demo56.txt demo.txt numbers.txt student.txt
contactinfo.txt demo1.txt demo9.txt ett.txt scores.txt test.txt
[root@localhost ~]# ls *.txt|tr 'a-z' 'A-Z' //大小写转换

[root@localhost ~]# ls *.txt|tr "a-z" "A-Z" //

[root@localhost ~]# ls *.txt|tr [a-z] [A-Z]   //
CONTACTINFO2.TXT
CONTACTINFO.TXT
DEMO10.TXT
DEMO1.TXT
DEMO56.TXT
DEMO9.TXT
DEMO.TXT
ETT.TXT
NUMBERS.TXT
SCORES.TXT
STUDENT.TXT
TEST.TXT

[root@localhost ~]# cat time.txt
2017年 07月 21日 星期五 14:29:53 CST
2017年 07月 21日 星期五 14:30:14 CST
2017年 07月 21日 星期五 14:30:15 CST
2017年 07月 21日 星期五 14:30:15 CST
[root@localhost ~]# cat time.txt |tr -d "[0-9][:]" //-d 删除指定字符
年 月 日 星期五 CST
年 月 日 星期五 CST
年 月 日 星期五 CST
年 月 日 星期五 CST

 

//比较文件

// comm:逐行比较两个有序的文件

//diff 命令也是逐行比较多个文件的内容,与comm不同的是,diff并不要求参与比较的文件是有序的;既可以比较普通文件,还可以比较多个目录的内容的差异。

[root@localhost ~]# cat test1.txt test2.txt
01 aaa
02 bbb
03 ccc
01 aaa
02 ccc
06 ggg
07 fff
[root@localhost ~]# diff test1.txt test2.txt
2,3c2,4
< 02 bbb
< 03 ccc
---
> 02 ccc
> 06 ggg
> 07 fff

posted @ 2017-07-21 11:31  bkycrmn  阅读(157)  评论(0)    收藏  举报