Linux/Unix排序、合并与分割


Linux/Unix排序、合并与分割
 
排序:sort
[oracle@localhost sort.folder]$ sort -c ls.out 
sort: ls.out:2: disorder: -rw-r--r-- 1 oracle oinstall 2653 Feb 23 21:30 awk.out
  www.2cto.com  
表示未分类,使用 sort ls.out > ls.sort 将之分类重试:
[oracle@localhost sort.folder]$ sort ls.out > ls.sort
[oracle@localhost sort.folder]$ sort -c ls.sort
 
-k5表示根据第5行按降序排列:
[oracle@localhost sort.folder]$ sort -k 5 ls.out 
total 80
-rw-r--r-- 1 oracle oinstall    0 Feb 24 14:21 ls.out
-rw-r--r-- 1 oracle oinstall    0 Feb 24 14:21 sed.sh
-rwxr-xr-x 1 oracle oinstall   26 Nov 10 22:30 main.sh
-rwxrwxrwx 1 oracle oinstall   44 Jan  7 22:39 shelltest.sh
-rwxr-xr-x 1 oracle oinstall   99 Feb 23 11:51 test1.sh
-rwxr-xr-x 1 oracle oinstall   99 Feb 23 11:52 test2.sh
-rw-r--r-- 1 oracle oinstall  216 Feb 23 11:53 blank_file
-rwxr--r-- 1 oracle oinstall  642 Feb 15 18:43 find.sh
-rwxr--r-- 1 oracle oinstall 2250 Feb 23 21:20 awk.sh
-rw-r--r-- 1 oracle oinstall 2653 Feb 23 21:30 awk.out
drwxr-xr-x 2 oracle oinstall 4096 Feb 15 17:56 folder
  www.2cto.com  
-k5表示根据第5行按降升序排列:
[oracle@localhost sort.folder]$ sort -k5 -r ls.out 
drwxr-xr-x 2 oracle oinstall 4096 Feb 15 17:56 folder
-rw-r--r-- 1 oracle oinstall 2653 Feb 23 21:30 awk.out
-rwxr--r-- 1 oracle oinstall 2250 Feb 23 21:20 awk.sh
-rwxr--r-- 1 oracle oinstall  642 Feb 15 18:43 find.sh
-rw-r--r-- 1 oracle oinstall  216 Feb 23 11:53 blank_file
-rwxr-xr-x 1 oracle oinstall   99 Feb 23 11:52 test2.sh
-rwxr-xr-x 1 oracle oinstall   99 Feb 23 11:51 test1.sh
-rwxrwxrwx 1 oracle oinstall   44 Jan  7 22:39 shelltest.sh
-rwxr-xr-x 1 oracle oinstall   26 Nov 10 22:30 main.sh
-rw-r--r-- 1 oracle oinstall    0 Feb 24 14:21 sed.sh
-rw-r--r-- 1 oracle oinstall    0 Feb 24 14:21 ls.out
total 80
 
 
返回排序后的第一行:
[oracle@localhost sort.folder]$ sort -k5 -r ls.out | head -1
drwxr-xr-x 2 oracle oinstall 4096 Feb 15 17:56 folder
 
返回排序后的最后两行:
[oracle@localhost sort.folder]$ sort -k5 -r ls.out | tail -2
-rw-r--r-- 1 oracle oinstall    0 Feb 24 14:21 ls.out
total 80
 
awk使用sort的输出结果:
[oracle@localhost sort.folder]$ sort -k5 -r ls.out | head -2 | awk '{print "file_name:"$9 " size:"$5}' 
file_name:folder size:4096
file_name:awk.out size:2653
 
某个文件中的内容如下:
[oracle@localhost sort.folder]$ cat iplist 
193.132.80.123 dave tansley
193.132.80.23  HP printer 2nd floor
193.132.80.198 JJ. Peter's scanner
193.132.80.38  SPARE
193.132.80.78  P.Edron
需要根据ip地址的最后一段进行排序:
[oracle@localhost sort.folder]$ sort -t. -k4 -r -n iplist
193.132.80.198 JJ. Peter's scanner
193.132.80.123 dave tansley
193.132.80.78  P.Edron
193.132.80.38  SPARE
193.132.80.23  HP printer 2nd floor
这里-r降序,-t.表示根据.进行分类,-n表示排序的是数值类型
 
uniq去重复用法:
其选项含义:
-u   只显示不重复行。
-d   只显示有重复数据行,每种重复行只显示其中一行
-c   打印每一重复行出现次数。
-f   n为数字,前n个域被忽略。
 
对已经排序的文件内容进行去重操作:
[oracle@localhost sort.folder]$ cat ls.sort 
total 80
total 80
-rw-r--r-- 1 oracle oinstall    0 Feb 24 14:21 ls.out
-rw-r--r-- 1 oracle oinstall    0 Feb 24 14:21 ls.out
-rw-r--r-- 1 oracle oinstall    0 Feb 24 14:21 sed.sh
-rw-r--r-- 1 oracle oinstall    0 Feb 24 14:21 sed.sh
-rwxr-xr-x 1 oracle oinstall   26 Nov 10 22:30 main.sh
-rwxr-xr-x 1 oracle oinstall   26 Nov 10 22:30 main.sh
-rwxrwxrwx 1 oracle oinstall   44 Jan  7 22:39 shelltest.sh
-rwxrwxrwx 1 oracle oinstall   44 Jan  7 22:39 shelltest.sh
-rwxr-xr-x 1 oracle oinstall   99 Feb 23 11:51 test1.sh
-rwxr-xr-x 1 oracle oinstall   99 Feb 23 11:51 test1.sh
-rwxr-xr-x 1 oracle oinstall   99 Feb 23 11:52 test2.sh
-rwxr-xr-x 1 oracle oinstall   99 Feb 23 11:52 test2.sh
-rw-r--r-- 1 oracle oinstall  216 Feb 23 11:53 blank_file
-rw-r--r-- 1 oracle oinstall  216 Feb 23 11:53 blank_file
-rwxr--r-- 1 oracle oinstall  642 Feb 15 18:43 find.sh
-rwxr--r-- 1 oracle oinstall  642 Feb 15 18:43 find.sh
-rwxr--r-- 1 oracle oinstall 2250 Feb 23 21:20 awk.sh
-rwxr--r-- 1 oracle oinstall 2250 Feb 23 21:20 awk.sh
-rw-r--r-- 1 oracle oinstall 2653 Feb 23 21:30 awk.out
-rw-r--r-- 1 oracle oinstall 2653 Feb 23 21:30 awk.out
drwxr-xr-x 2 oracle oinstall 4096 Feb 15 17:56 folder
drwxr-xr-x 2 oracle oinstall 4096 Feb 15 17:56 folder
 
[oracle@localhost sort.folder]$ uniq ls.sort 
total 80
-rw-r--r-- 1 oracle oinstall    0 Feb 24 14:21 ls.out
-rw-r--r-- 1 oracle oinstall    0 Feb 24 14:21 sed.sh
-rwxr-xr-x 1 oracle oinstall   26 Nov 10 22:30 main.sh
-rwxrwxrwx 1 oracle oinstall   44 Jan  7 22:39 shelltest.sh
-rwxr-xr-x 1 oracle oinstall   99 Feb 23 11:51 test1.sh
-rwxr-xr-x 1 oracle oinstall   99 Feb 23 11:52 test2.sh
-rw-r--r-- 1 oracle oinstall  216 Feb 23 11:53 blank_file
-rwxr--r-- 1 oracle oinstall  642 Feb 15 18:43 find.sh
-rwxr--r-- 1 oracle oinstall 2250 Feb 23 21:20 awk.sh
-rw-r--r-- 1 oracle oinstall 2653 Feb 23 21:30 awk.out
drwxr-xr-x 2 oracle oinstall 4096 Feb 15 17:56 folder
 
显示重复的次数:
[oracle@localhost sort.folder]$ uniq -dc ls.sort 
      2 total 80
      2 -rw-r--r-- 1 oracle oinstall    0 Feb 24 14:21 ls.out
      2 -rw-r--r-- 1 oracle oinstall    0 Feb 24 14:21 sed.sh
      2 -rwxr-xr-x 1 oracle oinstall   26 Nov 10 22:30 main.sh
      2 -rwxrwxrwx 1 oracle oinstall   44 Jan  7 22:39 shelltest.sh
      2 -rwxr-xr-x 1 oracle oinstall   99 Feb 23 11:51 test1.sh
      2 -rwxr-xr-x 1 oracle oinstall   99 Feb 23 11:52 test2.sh
      2 -rw-r--r-- 1 oracle oinstall  216 Feb 23 11:53 blank_file
      2 -rwxr--r-- 1 oracle oinstall  642 Feb 15 18:43 find.sh
      2 -rwxr--r-- 1 oracle oinstall 2250 Feb 23 21:20 awk.sh
      2 -rw-r--r-- 1 oracle oinstall 2653 Feb 23 21:30 awk.out
      2 drwxr-xr-x 2 oracle oinstall 4096 Feb 15 17:56 folder
 
下面ls.sort2文件中有如下内容:
[oracle@localhost sort.folder]$ cat ls.sort2      
0 oracle oinstall
0 oracle oinstall
0 oracle oinstall
0 oracle oinstall
26 oracle oinstall
26 oracle oinstall
44 oracle oinstall
44 oracle oinstall
99 oracle oinstall
99 oracle oinstall
99 oracle oinstall
99 oracle oinstall
216 oracle oinstall
216 oracle oinstall
642 oracle oinstall
642 oracle oinstall
2250 oracle oinstall
2250 oracle oinstall
2653 oracle oinstall
2653 oracle oinstall
4096 oracle oinstall
4096 oracle oinstall
 
去重复显示:
[oracle@localhost sort.folder]$ uniq -c ls.sort2  
      4 0 oracle oinstall
      2 26 oracle oinstall
      2 44 oracle oinstall
      4 99 oracle oinstall
      2 216 oracle oinstall
      2 642 oracle oinstall
      2 2250 oracle oinstall
      2 2653 oracle oinstall
      2 4096 oracle oinstall
 
使用-f前2个域忽略,则系统判断均为重复数据:
[oracle@localhost sort.folder]$ uniq -cf2 ls.sort2    
     22 0 oracle oinstall
 
join的用法:
有两个文件,内容如下:
[oracle@localhost sort.folder]$ cat names.txt 
M.Golls 12 Hidd Rd
P.Heller The Acre
P.Willey 132 The Grove
T.Norms 84 Connaught Rd
K.Fletch 12 Woodlea
[oracle@localhost sort.folder]$ cat town.txt 
M.Golls Norwith NRD
P.Willey Galashiels GDD
T.Norms Brandon BSL
K.Fletch Mildenhall MAF
 
我们来连接两个文件(其实类似于sql中的join):
[oracle@localhost sort.folder]$ join names.txt town.txt 
M.Golls 12 Hidd Rd Norwith NRD
P.Willey 132 The Grove Galashiels GDD
T.Norms 84 Connaught Rd Brandon BSL
K.Fletch 12 Woodlea Mildenhall MAF
 
显示第一个文件中未与第二个文件内容匹配的行:
[oracle@localhost sort.folder]$ join -a1 names.txt town.txt 
M.Golls 12 Hidd Rd Norwith NRD
P.Heller The Acre
P.Willey 132 The Grove Galashiels GDD
T.Norms 84 Connaught Rd Brandon BSL
K.Fletch 12 Woodlea Mildenhall MAF
 
显示第一个文件的第一个域和第二个文件的第二个域:
[oracle@localhost sort.folder]$ join -o 1.1,2.2 names.txt town.txt 
M.Golls Norwith
P.Willey Galashiels
T.Norms Brandon
K.Fletch Mildenhall
 
将文件1的域1和文件2的域1作为连接键:
[oracle@localhost sort.folder]$ join -j1 1 -j2 1 names.txt town.txt 
M.Golls 12 Hidd Rd Norwith NRD
P.Willey 132 The Grove Galashiels GDD
T.Norms 84 Connaught Rd Brandon BSL
K.Fletch 12 Woodlea Mildenhall MAF
 
cut用来剪切从标准输入或者文本中的列或者域。剪切的文本可以粘贴到文本文件中:
剪切以点号分割的第三个域:
[oracle@localhost sort.folder]$ cut -d. -f3 iplist 
80
80
80
80
80
 
paste粘贴:
[oracle@localhost sort.folder]$ ls | paste -d"" -
iplist
ls.out
ls.sort
ls.sort2
names.txt
paste1
paste2
sort.sh
town.txt
 
将两个文件分为两列粘贴,以冒号隔开:
[oracle@localhost sort.folder]$ paste -d: names.txt town.txt 
M.Golls 12 Hidd Rd:M.Golls Norwith NRD
P.Heller The Acre:P.Willey Galashiels GDD
P.Willey 132 The Grove:T.Norms Brandon BSL
T.Norms 84 Connaught Rd:K.Fletch Mildenhall MAF
K.Fletch 12 Woodlea:
 
split分割文件:
文件较大时可以使用此方法:
[oracle@localhost sort.folder]$ ll
total 64
-rw-r--r-- 1 oracle oinstall  143 Mar  3 10:58 iplist
-rw-r--r-- 1 oracle oinstall  620 Mar  3 10:51 ls.out
-rw-r--r-- 1 oracle oinstall 1240 Mar  3 11:14 ls.sort
-rw-r--r-- 1 oracle oinstall  436 Mar  3 11:25 ls.sort2
-rw-r--r-- 1 oracle oinstall  104 Mar  3 11:33 names.txt
-rw-r--r-- 1 oracle oinstall   12 Mar  3 12:07 paste1
-rw-r--r-- 1 oracle oinstall    0 Mar  3 12:04 paste2
-rwxr--r-- 1 oracle oinstall    0 Mar  3 09:51 sort.sh
-rw-r--r-- 1 oracle oinstall   88 Mar  3 11:35 town.txt
 
将文件分割为两行一个文件:
[oracle@localhost sort.folder]$ split -2 ls.out 
[oracle@localhost sort.folder]$ ll
total 112
-rw-r--r-- 1 oracle oinstall  143 Mar  3 10:58 iplist
-rw-r--r-- 1 oracle oinstall  620 Mar  3 10:51 ls.out
-rw-r--r-- 1 oracle oinstall 1240 Mar  3 11:14 ls.sort
-rw-r--r-- 1 oracle oinstall  436 Mar  3 11:25 ls.sort2
-rw-r--r-- 1 oracle oinstall  104 Mar  3 11:33 names.txt
-rw-r--r-- 1 oracle oinstall   12 Mar  3 12:07 paste1
-rw-r--r-- 1 oracle oinstall    0 Mar  3 12:04 paste2
-rwxr--r-- 1 oracle oinstall    0 Mar  3 09:51 sort.sh
-rw-r--r-- 1 oracle oinstall   88 Mar  3 11:35 town.txt
-rw-r--r-- 1 oracle oinstall  108 Mar  3 12:14 xaa
-rw-r--r-- 1 oracle oinstall  113 Mar  3 12:14 xab
-rw-r--r-- 1 oracle oinstall  109 Mar  3 12:14 xac
-rw-r--r-- 1 oracle oinstall  111 Mar  3 12:14 xad
-rw-r--r-- 1 oracle oinstall  116 Mar  3 12:14 xae
-rw-r--r-- 1 oracle oinstall   63 Mar  3 12:14 xaf
 

相关内容

    暂无相关文章