您的位置:首页 > 数据库

sort、uniq命令(可以对文本内容过滤除重)、split分割文件

2009-07-08 08:52 369 查看
文章来自:http://blog.chinaunix.net/u1/40226/showart_315762.html

1.uniq----过滤、统计、删除重复行

  uniq [options][file1 [files]]

$ uniq -c file  [newfile]  file中的重复行输出一次,并在每行前显示重复次数

$ uniq -d file  [newfile] file中的重复行输出一次,但不输出唯一的行

$ uniq -u file  [newfile]       只输出file中的唯一行

$ uniq file1 file2 把file1中的重复的相邻行删除,并把每行的一个拷贝送到file2
注意:用uniq 命令除重 必须用sort命令进行递增或递减排序后才能用。

sort  file 

uniq  file

或直接使用

sort -u file  这条命令包括排序及除重

[root@lmailmms root]# more cwm.txt

133  2008-02-17

133  2008-02-16

133  2008-04-10

132  2007-08-11

[root@lmailmms root]# uniq -w 3 cwm.txt  

133  2008-02-17

132  2007-08-11

取出第一列值来除重,也就是取第一个
适配的133的行

 

2.sort命令的功能是对文件中的各行进行排序

 
sort命令有许多非常实用的选项,这些选项最初是用来对数据库格式的文件内容进行各种排序操作的。实际上,sort命令可以被认为是一个非常强大的数据管理工具,用来管理内容类似数据库记录的文件。

Sort命令将逐行对文件中的内容进行排序,如果两行的首字符相同,该命令将继续比较这两行的下一字符,如果还相同,将继续进行比较。
语法:
sort [选项] 文件
说明:sort命令对指定文件中所有的行进行排序,并将结果显示在标准输出上。如不指定输入文件或使用
“-
”,则表示排序内容来自标准输入。sort排序是根据从输入行抽取的一个或多个关键字进行比较来完成的。排序关键字定义了用来排序的最小的字符序列。缺省
情况下以整行为关键字按ASCII字符顺序进行排序。
改变缺省设置的选项主要有:
- m 若给定文件已排好序,合并文件。
- c 检查给定文件是否已排好序,如果它们没有都排好序,则打印一个出错信息,并以状态值1退出。
- u 对排序后认为相同的行只留其中一行。
- o 输出文件 将排序输出写到输出文件中而不是标准输出,如果输出文件是输入文件之一,sort先将该文件的内容写入一个临时文件,然后再排序和写输出结果。
改变缺省排序规则的选项主要有:
- d 按字典顺序排序,比较时仅字母、数字、空格和制表符有意义。
- f 将小写字母与大写字母同等对待。
- I 忽略非打印字符。
- M 作为月份比较:“JAN”<“FEB”
- r 按逆序输出排序结果。
+posl - pos2 指定一个或几个字段作为排序关键字,字段位置从posl开始,到pos2为止(包括posl,不包括pos2)。如不指定pos2,则关键字为从posl到行尾。字段和字符的位置从0开始。
- b 在每行中寻找排序关键字时忽略前导的空白(空格和制表符)。
- t separator 指定字符separator作为字段分隔符。
例子:
[root@TestAs4 mdn]# more mdn_dishi.txt

1350000 510 51 广州

1350002 510 51 广州

1350004 540 51 深圳
[root@TestAs4 mdn]# sort -n -u -k 1 mdn_dishi.txt >chenwenming_mdn_d
#把文件mdn_dishi.txt第一字段以数字排序并除重
 
 

3. wc-----输出每个文件中的字符数、单词数及行数。

wc [options][files]

$ wc -l file  输出file中的行数

$ wc -w file  输出file中的单词数

$ wc -c file  输出file中的字符数
 
 
4. split-----把大文件分割成小文件(文本文件)

 
split  -l number(多少行)   old.txt(原文件)  ##-l安照多少行来分割文件 
split -b 1m  old.txt(原文件)  ##SIZE 值为每一输出档案的大小,单位为 byte。
 
 
 
 
 
5. awk 用法

 
例如:
awk -F: '{ print $1 }' /etc/passwd >txt    取第一列 以:为分界线

awk  '{ print $2 }' file   >txt    取第二列  以空格为分界线

[root@TestAs4 cwm]# awk '{print $1}' 133mdn.txt |uniq -c #给文件133mdn.txt第一个字段分组统计

   2336 七台河

   2033 伊春

   3331 佳木斯

   2530 双鸭山

  39811 哈尔滨

    845 大兴安岭

-----------------------------------------------------------------------------

awk处里两个文件连查方法

[root@TestAs4 cwm]# awk '{print $1,substr($1,1,7)}' hlj_jifei >hlj_temp

[root@TestAs4 mdn]# more hlj_temp

130097XX055 1300970

130097XX495 1300970

[root@TestAs4 mdn]# more  test1

1300019                 510             020     广州

1300101                 110             010     北京

1300103                 110             010     北京

[root@TestAs4 mdn]# awk  'NR==FNR{a[substr($1,1,7)]=$4}NR>FNR&&a[b=substr($1,1,7)]{print $1,a[b]}' test1 hlj_temp



[root@TestAs4 mdn]# awk  'NR==FNR{a[$1]=$4}NR>FNR&&a[b=substr($1,1,7)]{print $1,a[b]}' test1 hlj_temp

130097XX055 哈尔滨

130097XX495 哈尔滨

--------------------------------------------------------------------------------------

[root@TestAs4 mdn]# more temp

1300970 130097XX055

1300970 130097XX495

[root@TestAs4 mdn]# more awk_script

BEGIN { while ((getline < "test1") > 0){ lines[$1]=$4 };OFS=" " }

{

   if($1 in lines){

       $1=lines[$1]    #把test1文件的$4替换到temp文件的$1上

        print $0

   }



#要求把test1文件的第四个字段插入到temp文件的相应条目的第一个子段中

#利用getline获取test1文件的第四个字段,并且放到一个数组中。

[root@TestAs4 mdn]# ls

2  3  awk_script  cwm  hlj_jifei  hlj_temp  newmdn_table.TXT  temp  test1

[root@TestAs4 mdn]# awk -f awk_script  temp  |more

哈尔滨 130097XX055

哈尔滨 130097XX495
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  file 数据库 byte 工具 c
相关文章推荐