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的行
也可以用sort 比较通用
sort -k1,1 -u cwm.txt
2.sort命令的功能是对文件中的各行进行排序
sort命令有许多非常实用的选项,这些选项最初是用来对数据库格式的文件内容进行各种排序操作的。实际上,sort命令可以被认为是一个非常强大的数据管理工具,用来管理内容类似数据库记录的文件。
Sort命令将逐行对文件中的内容进行排序,如果两行的首字符相同,该命令将继续比较这两行的下一字符,如果还相同,将继续进行比较。
语法:
sort [选项] 文件
说明:sort命令对指定文件中所有的行进行排序,并将结果显示在标准输出上。如不指定输入文件或使用“- ”,则表示排序内容来自标准输入。sort排序是根据从输入行抽取的一个或多个关键字进行比较来完成的。排序关键字定义了用来排序的最小的字符序列。缺省情况下以整行为关键字按ASCII字符顺序进行排序。
改变缺省设置的选项主要有:
- m 若给定文件已排好序,合并文件。
- c 检查给定文件是否已排好序,如果它们没有都排好序,则打印一个出错信息,并以状态值1退出。
- u 对排序后认为相同的行只留其中一行。
- o 输出文件 将排序输出写到输出文件中而不是标准输出,如果输出文件是输入文件之一,sort先将该文件的内容写入一个临时文件,然后再排序和写输出结果。
改变缺省排序规则的选项主要有:
- d 按字典顺序排序,比较时仅字母、数字、空格和制表符有意义。
- f 将小写字母与大写字母同等对待。
- I 忽略非打印字符。
- M 作为月份比较:“JAN”<“FEB”
- r 按逆序输出排序结果。
- k, --key=POS1[,POS2]
start a key at POS1, end it at POS 2 (origin 1)
[root@ha1 ~]# more 1.txt
133 234 3444
233 234 2333
122 235 3456
234 235 3444
[root@ha1 ~]# sort -k 2,2 -u 1.txt
133 234 3444
122 235 3456
+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
阅读(10590) | 评论(2) | 转发(0) |