• 实用的分c(sortQ操作?
sort命o的一般格式ؓQ?
sort -cmu -o output_file [other options] +pos1 +pos2 input_files
下面要介l一下s o r t的参敎ͼ
-c 试文g是否已经分类?
-m 合ƈ两个分类文g?
-u 删除所有复制行?
-o 存储s o r tl果的输出文件名?
其他选项有:
-b 使用域进行分cLQ忽略第一个空根{?
-n 指定分类是域上的数字分类?
-t 域分隔符Q用非空格或t a b键分隔域?
-r 对分cL序或比较求逆?
+n n为域受用此域号开始分cR?
n n为域受在分类比较时忽略此域,一般与+ n一起用?
post1 传递到mQn。m为域Pn为开始分cdW数Q例?Q?意即以第5域分c,从第7
个字W开始?
举例Q?
按第一个域分类
-bash-3.00$ sort -k0 sed.txt
打印分类后的最后第一?
-bash-3.00$ sort -k0 sed.txt | tail -1
打印分类后的W一?
-bash-3.00$ sort -k0 sed.txt | head -1
awk使用sort输出l果
-bash-3.00$ sort -k0 sed.txt | head -1 | awk '{if($1=="caodejun")print $1}'
两个分cL件合q?
-bash-3.00$ sort -m sed.txt sort.txt
文件合q前Q它们必d被分cR合q文件可用于事务处理和Q何种cȝ修改操作?
下面q个例子Q因为忘了把两个家电名称加入文gQ它们被攑֜一个单独的文g里,现在?
之ƈ入一个文件。分cȝ合ƈ格式?#8216;sort -m sorted_file1 sorted_file2’?
删除重复?
-bash-3.00$ sort -u sed.txt
• uniq
uniq用来从一个文本文件中去除或禁止重复行。一般uniq假定文g已分c,q且l果正确。我们ƈ不强制要求这样做Q如果愿意,可以使用M非排序文本,甚至是无规律行?
-bash-3.00$ who | awk '{print $1} ' |uniq
liuzk423
605408211
shuzigui
nefu_luyanshen
waterlooz
wsoangel
tomotoboy
xp55699312
zyy0904
caodejun
duke1988
605408211
nefu_luyanshen
zyy0904
lonelysand
昄不唯一的行
-bash-3.00$ who | awk '{print $1} ' |uniq -d
-c打印每一重复行出现次数?
-bash-3.00$ who | awk '{print $1} ' |uniq -c
1 liuzk423
1 605408211
1 shuzigui
1 nefu_luyanshen
1 waterlooz
1 wsoangel
1 tomotoboy
1 xp55699312
1 zyy0904
1 caodejun
1 duke1988
1 605408211
1 nefu_luyanshen
1 zyy0904
1 lonelysand
q里没有搞懂nefu_luyanshen明明重复Q却昄重复行数目ؓ1
对特定域q行试Q?n只测试一行一部分的唯一性?
-bash-3.00$ who | awk '{print $1} ' |uniq -n2
liuzk423
• join
两个已l分好类的文件连接在一起哈。一些系l要求用join时文件域要少?0Qؓ公^赯Q如果域大于20Q应使用DBMSpȝQ其一般格式如下:
join [options] in_file1 in_file2
-bash-3.00$ cat sed.txt
605408211 pts/16 Jul 31 13:54 (218.0.1.42)
caodejun pts/44 Jul 31 14:16 (219.148.133.31)
duke1988 pts/45 Jul 31 14:41 (218.104.163.66)
liuzk423 pts/6 Jul 20 08:27 (219.245.104.240)
nefu_luyanshen pts/23 Jul 31 14:33 (218.25.6.142)
nefu_luyanshen pts/48 Jul 31 12:59 (218.25.6.142)
shuzigui pts/21 Jul 31 12:11 (121.35.248.193)
tomotoboy pts/41 Jul 31 13:31 (219.221.99.155)
waterlooz pts/25 Jul 31 08:48 (121.0.29.225)
wsoangel pts/35 Jul 31 13:40 (116.233.219.10)
xp55699312 pts/42 Jul 31 14:12 (61.152.132.103)
zyy0904 pts/43 Jul 31 13:53 (125.33.195.36)
-bash-3.00$ cat sort.txt
605408211 pts/16 Jul 31 13:54 (218.0.1.42)
caodejun pts/44 Jul 31 14:16 (219.148.133.31)
duke1988 pts/45 Jul 31 14:41 (218.104.163.66)
-bash-3.00$ join sed.txt sort.txt
605408211 pts/16 Jul 31 13:54 (218.0.1.42) pts/16 Jul 31 13:54 (218.0.1.42)
caodejun pts/44 Jul 31 14:16 (219.148.133.31) pts/44 Jul 31 14:16 (219.148.133.31)
duke1988 pts/45 Jul 31 14:41 (218.104.163.66) pts/45 Jul 31 14:41 (218.104.163.66)
选择匚w
-bash-3.00$ join -a1 -a2 sed.txt sort.txt
605408211 pts/16 Jul 31 13:54 (218.0.1.42) pts/16 Jul 31 13:54 (218.0.1.42)
caodejun pts/44 Jul 31 14:16 (219.148.133.31) pts/44 Jul 31 14:16 (219.148.133.31)
duke1988 pts/45 Jul 31 14:41 (218.104.163.66) pts/45 Jul 31 14:41 (218.104.163.66)
liuzk423 pts/6 Jul 20 08:27 (219.245.104.240)
nefu_luyanshen pts/23 Jul 31 14:33 (218.25.6.142)
nefu_luyanshen pts/48 Jul 31 12:59 (218.25.6.142)
shuzigui pts/21 Jul 31 12:11 (121.35.248.193)
tomotoboy pts/41 Jul 31 13:31 (219.221.99.155)
waterlooz pts/25 Jul 31 08:48 (121.0.29.225)
wsoangel pts/35 Jul 31 13:40 (116.233.219.10)
xp55699312 pts/42 Jul 31 14:12 (61.152.132.103)
zyy0904 pts/43 Jul 31 13:53 (125.33.195.36)
-bash-3.00$ join -o 1.1 2.2 sed.txt sort.txt
605408211 pts/16
caodejun pts/44
duke1988 pts/45
-bash-3.00$ join -o 1.1 2.2 2.3 sed.txt sort.txt
605408211 pts/16 Jul
caodejun pts/44 Jul
duke1988 pts/45 Jul
• cut
cut用来从标准输入或文本文g中剪切列或域。剪切文本可以将之粘贴到一个文本文件?
下一节将介绍_脓用法?
cut一般格式ؓQ?
cut [options] file1 file2
下面介绍其可用选项Q?
-c list 指定剪切字符数?
-f field 指定剪切域数?
-d 指定与空格和t a b键不同的域分隔符?
- c用来指定剪切范围Q如下所C:
- c 1Q?-7 剪切W?个字W,然后是第5到第7个字W?
-c1-50 剪切? 0个字W?
-f 格式? c相同?
-f 1Q? 剪切 W?域,W?域?
- f 1Q?0-12 剪切W?域,W? 0域到W? 2域?
-bash-3.00$ ps -ef | cut -c1-8
-bash-3.00$ ps -ef | cut -d: -f1
-bash-3.00$ ps -ef | cut -d: -f1Q?
• paste
cut用来从文本文件或标准输出中抽取数据列或者域Q然后再?paste可以这些数据粘?
h形成相关文g。粘贴两个不同来源的数据Ӟ首先需其分类Qƈ保两个文g行数?
同?
paste按行将不同文g行信息放在一行。缺省情况下Q?pasteq接Ӟ用空格或tab键分?
新行中不同文本,除非指定- d选项Q它成为域分隔W。paste格式为:
paste -d -s -file1 file2
选项含义如下Q?
-d 指定不同于空格或t a b键的域分隔符。例如用@分隔域,使用- d @?
-s 每个文件合q成行而不是按行粘贴?
- 使用标准输入。例如ls -l |paste Q意卛_在一列上昄输出?
• split
split用来大文g分割成小文g。有时文件越来越大,传送这些文件时Q首先将其分割可
能更Ҏ。用v i或其他工兯如sortӞ如果文g对于工作~冲区太大,也会存在一些问题?
因此有时没有选择余地Q必d文g分割成小的碎片?
split命o一般格式:
split -output_file-size input-filename output-filename
q里output_file-size 指的是文本文件被分割的行数?
-bash-3.00$ ps -ef |split -10
-bash-3.00$ ls
a.out greeting.sh main.c sort.txt xac xai xao
|
|
append.sed grepgrepstrings nohup.out test xad xaj xap
|
|
change.sed grepstr readme.sh test.sh xae xak xaq
|
|
core.log hello seawolf user.online xaf xal xar
|
|
factorial hello.cpp sed.out xaa xag xam
|
|
factorial.c main sed.txt xab xah xan |