第5章:文本处理

 

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 '\n'

     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.3paste命令按列合并

范例1cat 打印多个文本按行拼接打印,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.

 

范例2paste   -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.4tac命令逆序形式打印行

范例:\n是默认的行分隔符,-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.5wc统计文件的行数、单词数和字符数

范例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.6headtail打印文件前10行和后10

范例1head命令默认打印前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

 

范例2head –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

 

范例3tail命令默认打开最后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

 

范例4tail –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.7df创建特定大小的文本

范例: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]#

 

posted @ 2017-05-22 18:57  邹龙彬  阅读(383)  评论(0编辑  收藏  举报