第5章:文本处理
5.1、cat拼接功能
cat是命令行家必学的命令之一,cat通常用户读取、显示或拼接文件内容,不过cat所具备的功能远不止这些。
cat 三大功能
cat功能一:
范例1:显示文本内容
[root@cloucentos6 home]# cat file
testtest
cat 功能二:
范例2:从键盘创建一个文本,结束按ctrl+c结束文本输入
[root@cloucentos6 home]# cat file
testtest
testtest
[root@cloucentos6 home]# cat file
testtest
testtest
cat功能三:
范例3:把a1和a2两个文本内容拼接同时显示出来。
[root@cloucentos6 home]# cat a1
11111
[root@cloucentos6 home]# cat a2
22222
[root@cloucentos6 home]# cat a1 a2
11111
22222
cat常用参数
cat –[选项] [文件]
cat -n file #显示file文本内容并对所有输出标记行号,以1开始记数
cat -s file #当遇到file文本有两行以上的空白行就压缩成一行的空白行显示
cat -T file #显示file文本内容时遇到制表符(Tab)就在前面标记 ^I
cat -b file #显示file文本内容对非空白行标记行号,以1开始记数
范例4:去掉空白行并标记行号
[root@cloucentos6 home]# cat file2
11111
22222
33333
444444
55555
66666
[root@cloucentos6 home]# cat -b file2 | tr -s ' '
1 11111
2 22222
3 33333
4 444444
5 55555
6 66666
5.2、排序文本
sort默认将文本每一行作为一个单位,而且默认以字符串形式来排序,依次按ASCII码进行排序,最后将他们以升序输出。
范例1:sort默认按ASCII码排序 ,默认按字符串形式进行排序
[root@cloucentos6 home]# cat file.txt
999
5675
2223
6789
a1a2
bbb
cd23
[root@cloucentos6 home]# sort file.txt
2223
5675
6789
999
a1a2
bbb
cd23
sort –n 使用纯数字进行排序
范例2: 默认升序
[root@cloucentos6 home]# cat file.txt
322
411
833
120
010
[root@cloucentos6 home]# sort -n file.txt
010
120
322
411
833
sort -r 降序排序
范例3:按纯数字并且以降序进行排序
[root@cloucentos6 home]# cat file.txt
10
2
1
77
0
[root@cloucentos6 home]# sort -nr file.txt
77
10
2
1
0
sort -k 依据键或列进行排序
范例4:依据第一列列号(键)按纯数字降序进行排序
[root@cloucentos6 home]# cat file.txt
1 zhou 1000
2 xiao 9000
3 hong 2000
4 zhang 5000
[root@cloucentos6 home]# sort -nrk 1 file.txt
4 zhang 5000
3 hong 2000
2 xiao 9000
1 zhou 1000
范例5:依据第三列列号(键)按纯数字进行排序
[root@cloucentos6 home]# cat file.txt
1 zhou 1000
2 xiao 9000
3 hong 2000
4 zhang 5000
[root@cloucentos6 home]# sort -nk 3 file.txt
1 zhou 1000
3 hong 2000
4 zhang 5000
2 xiao 9000
范例6:依据第一列(键)第3个字符或第4个字符并按纯数字进行排序
[root@cloucentos6 home]# cat file.txt
1234
6089
5428
0001
[root@cloucentos6 home]# sort -nk 1.3 file.txt
0001
5428
1234
6089
[root@cloucentos6 home]# sort -nk 1.4 file.txt
0001
1234
5428
6089
sort -d 忽略最前面的空格符部分
范例7:
[root@cloucentos6 home]# cat file.txt
120
110
999
[root@cloucentos6 home]# sort -nb file.txt
110
120
999
sort –t 分隔符,默认是使用tab键分隔
范例8:以冒号 : 为分割符按第二列纯数字进行排序
[root@cloucentos6 home]# cat file.txt
u:01:gun
d:04:linux
u:09:bash
u:03:back
[root@cloucentos6 home]# sort -t ':' -nk 2 file.txt
u:01:gun
u:03:back
d:04:linux
u:09:bash
sort -u 相同的数据只显示一行,uniq命令消除重复内容
范例9:
[root@cloucentos6 home]# cat file.txt
999
999
333
333
111
111
111
222
[root@cloucentos6 home]# sort -u file.txt
111
222
333
999
[root@cloucentos6 home]# uniq file.txt
999
333
111
222
[root@cloucentos6 home]# sort file.txt | uniq
111
222
333
999
[root@cloucentos6 home]# sort file.txt | uniq –c #计数唯一排序后的康
3 111
1 222
2 333
2 999
[root@cloucentos6 home]# sort file.txt | uniq –d #仅显示重复的记录
111
333
999
[root@cloucentos6 home]# sort file.txt | uniq –u #仅显示未重复的记录
222
范例10:统计各行在文件中出现的次数
[root@cloucentos6 home]# cat file.txt
999
999
333
333
111
111
111
[root@cloucentos6 home]# sort file.txt | uniq -c
3 111
2 333
2 999
[root@cloucentos6 home]# uniq file.txt -c
2 999
2 333
3 111
范例11:找出文件中重复的行
[root@cloucentos6 home]# cat file.txt
999
999
333
111
111
111
[root@cloucentos6 home]# sort file.txt | uniq -d
111
999
[root@cloucentos6 home]# sort file.txt | uniq -dc
3 111
2 999
[root@cloucentos6 home]# uniq -dc file.txt
2 999
3 111
5.3、paste命令按列合并
范例1:cat 打印多个文本按行拼接打印,pastte打印多个文本按列拼接打印。
[root@cloucentos6 home]# cat font.txt
my name is zhanghong.
zhaonghong is man.
[root@cloucentos6 home]# cat font2.txt
my name is xiaoming.
xiaoming is man.
[root@cloucentos6 home]# cat font.txt font2.txt
my name is zhanghong.
zhaonghong is man.
my name is xiaoming.
xiaoming is man.
[root@cloucentos6 home]# paste font.txt font2.txt
my name is zhanghong. my name is xiaoming.
zhaonghong is man. xiaoming is man.
范例2:paste -d 选项指定定界符
[root@cloucentos6 home]# cat font.txt
my name is zhanghong.
zhaonghong is man.
[root@cloucentos6 home]# cat font2.txt
my name is xiaoming.
xiaoming is man.
[root@cloucentos6 home]# paste font.txt font2.txt -d "/ "
my name is zhanghong./my name is xiaoming.
zhaonghong is man./xiaoming is man.
5.4、tac命令逆序形式打印行
范例: 是默认的行分隔符,-s选项定义分隔符选项
[root@cloucentos6 home]# cat -n font2.txt
1 my name is xiaoming.
2 xiaoming is man.
[root@cloucentos6 home]# cat -n font2.txt | tac
2 xiaoming is man.
1 my name is xiaoming.
5.5、wc统计文件的行数、单词数和字符数
范例1:统计行数
[root@cloucentos6 home]# cat font.txt
abc
a1
b2
tom22key
hello world!
[root@cloucentos6 home]# wc -l font.txt
5 font.txt
[root@cloucentos6 home]# cat font.txt | wc -l
5
范例2:统计单词数
[root@cloucentos6 home]# cat font.txt
abc
a1
b2
hello world
[root@cloucentos6 home]# wc -w font.txt
5 font.txt
[root@cloucentos6 home]# cat font.txt | wc -w
5
范例3:统计字符数,文本换行符号算两个字符
[root@cloucentos6 home]# cat font.txt
a1
a2
[root@cloucentos6 home]# wc -c font.txt
8 font.txt
[root@cloucentos6 home]# cat font.txt | wc -c
8
[root@cloucentos6 home]# wc font.txt #wc默认会打印出行数、单词数和字符数
2 2 8 font.txt
5.6、head与tail打印文件前10行和后10行
范例1:head命令默认打印前10行
[root@cloucentos6 home]# wc -l font.txt
54 font.txt
[root@cloucentos6 home]# head font.txt | cat -n
1 abccddd1111111
2 abccddd1111111
3 abccddd1111111
4 abccddd1111111
5 abccddd1111111
6 abccddd1111111
7 abccddd1111111
8 abccddd1111111
9 abccddd1111111
10 abccddd1111111
范例2:head –n 打印指定前几行
[root@cloucentos6 home]# wc -l font.txt
54 font.txt
[root@cloucentos6 home]# head -n 4 font.txt | cat –n #打印前4行
1 abccddd1111111
2 abccddd1111111
3 abccddd1111111
4 abccddd1111111
[root@cloucentos6 home]# head -n -51 font.txt | cat –n #打印除最后53行之外的所有行
1 abccddd1111111
2 abccddd1111111
3 abccddd1111111
范例3:tail命令默认打开最后10行
[root@cloucentos6 home]# wc -l font.txt
54 font.txt
[root@cloucentos6 home]# tail font.txt
abccddd1111111
ddeeee22222222
abccddd3333333
abccddd5555555
abccddd1111111
abccddd1111111
abccddd6666666
abccddd1111111
abccddd1111111
abccddd1111111
[root@cloucentos6 home]# tail font.txt | cat -n
1 abccddd1111111
2 ddeeee22222222
3 abccddd3333333
4 abccddd5555555
5 abccddd1111111
6 abccddd1111111
7 abccddd6666666
8 abccddd1111111
9 abccddd1111111
10 abccddd1111111
范例4:tail –n 打印指定最后几行
[root@cloucentos6 home]# wc -l font.txt
54 font.txt
[root@cloucentos6 home]# tail -n 5 font.txt | cat –n #打印最后5行
1 abccddd1111111
2 abccddd6666666
3 abccddd1111111
4 abccddd1111111
5 abccddd1111111
[root@cloucentos6 home]# tail -n +50 font.txt | cat –n #打印除前50行之外的所有行
1 abccddd1111111
2 abccddd6666666
3 abccddd1111111
4 abccddd1111111
5 abccddd1111111
范例5:打印文件第2到第4行
[root@cloucentos6 home]# cat font.txt
1
2
3
4
5
6
[root@cloucentos6 home]# head -n 4 font.txt | tail -n +2
2
3
4
5.7、df创建特定大小的文本
范例:if代表输入的文件,of代表输出的文件,bs代表以字节为单位的块大小,conut代表需要被复制的块数。字节(1B)代码 c 字(2B)代码w 块(512B)代码b 千字节(1024B)代码k
兆字节(1024KB)代码M 吉字节(1024MB)代码G
[root@cloucentos6 home]# ls -l
总用量 24
-rw-r--r--. 1 root root 20 4月 25 23:46 file.txt
drwx------. 2 root root 16384 12月 21 17:14 lost+found
-rwxr-xr-x. 1 root root 98 4月 25 22:36 test.sh
[root@cloucentos6 home]# cat file.txt
1234
6089
5428
0001
1[root@cloucentos6 home]# dd if=/home/file.txt of=testfile.txt bs=1c count=7
记录了7+0 的读入
记录了7+0 的写出
7字节(7 B)已复制,8.5021e-05 秒,82.3 kB/秒
[root@cloucentos6 home]# ls -l
总用量 28
-rw-r--r--. 1 root root 20 4月 25 23:46 file.txt
drwx------. 2 root root 16384 12月 21 17:14 lost+found
-rw-r--r--. 1 root root 7 4月 26 01:49 testfile.txt
-rwxr-xr-x. 1 root root 98 4月 25 22:36 test.sh
[root@cloucentos6 home]# cat testfile.txt
1234
60[root@cloucentos6 home]#