0.sort排序

sort    默认ascii码排序(字母)

    -n                 数字排序
    -r                 反排序
    -k[列]            根据某列排序;
    -0输出文件         排序结果存入制定文件;
    -u                 去重复
1.排序并去重:
     sort -u uniny.com.ip.txt  >去重后IP.txt

1.uniq 去重

选项
     -c, --count                  //在每行前加上表示相应行目出现次数的前缀编号  
     -d, --repeated              //只输出重复的行  
     -D, --all-repeated          //只输出重复的行,不过有几行输出几行  
     -f, --skip-fields=N         //-f 忽略的段数,-f 1 忽略第一段  
     -i, --ignore-case           //不区分大小写  
     -s, --skip-chars=N          //根-f有点像,不过-s是忽略,后面多少个字符 -s 5就忽略后面5个字符  
     -u, --unique                //去除重复的后,全部显示出来,根mysql的distinct功能上有点像  
     -z, --zero-terminated   end lines with 0 byte, not newline  
     -w, --check-chars=N          //对每行第N 个字符以后的内容不作对照  
     --help                      //显示此帮助信息并退出  
     --version                  //显示版本信息并退出 

例子:
    1.排序并去重(默认去重叠加重复行):
        sort uniny.com.ip.txt |uniq.exe >去重后IP.txt

2.awk

格式:awk [-F '分隔符'] '{[表达式|参数]}'['[END {表达式} ]'] file

1.打印出某个列内容,填充tab分隔;
    $ awk '{print $#"\t" $#}' file.txt

2.根据某列去重(默认空格分隔)

    $ awk '{a[$#]=$0} END{for(i in a)print a[i]}' file.txt 
    //将数据存入a列表中,键值对存储,匹配到key更新值,!匹配追加进列表;
或:
    $ awk -F/ '!a[$#]++{print}' result.txt
    //将匹配存入列表,过滤重复(取反)打印
    //多个数值;or关系,如:!a[$#,$#]++{print}
    
3.根据某列取重复数据

    $ awk -F/ 'a[$#]++{print}' result.txt
     

示例:

1.根据二级域名,去除重复行
    $ awk -F/ '!a[$3]++{print}' result.txt

2.根据二级域名,取重复行
    $ awk -F/ 'a[$3]++{print}' result.txt

3.根据第二列去重并排序显示
     awk '{a[$2]=$0} END{for(i in a)print a[i]}' file.txt |awk '{print $1"\t"$2}'|sort -r -k2

4.文件中有多条重复的记录,只显示重复记录中的一条
    $ awk 'a[$0]++' file.txt

5.统计文件中每条记录出现的次数(按记录统计)
    $ awk -F/ '{++a[$0]} END{for(i in a)print i"\t\t\t\t\t\t"a[i]}' result.txt

6.统计文件中某个域出现的次数,根据日志中的IP地址统计某个IP访问网站的次数(按域统计)
    $ awk -F/ '{++a[$3]} END{for(i in a)print i"\t\t\t\t\t\t"a[i]}' result.txt

本文由 秋边丶 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论