shell使用--sort和uniq

sort常用来进行排序

sort命令是帮我们依据不同的数据类型进行排序,其语法及常用参数格式:

  sort [-bcfMnrtk][源文件][-o 输出文件] 
补充说明:sort可针对文本文件的内容,以行为单位来排序。

参  数:
  -b   忽略每行前面开始出的空格字符,从第一个可见字符开始比较。
  -c   检查文件是否已经按照顺序排序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1。

  -C会检查文件是否已排好序,如果乱序,不输出内容,仅返回1

  -f   排序时,忽略大小写字母。
  -M   将前面3个字母依照月份的缩写进行排序。
  -n   依照数值的大小排序。
  -o<输出文件>   将排序后的结果存入指定的文件。
  -r   以相反的顺序来排序(默认是升序)。
  -t<分隔字符>   指定排序时所用的栏位分隔字符。
  -k  选择以哪个区间进行排序。

说明:sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

[rocrocket@rocrocket programming]$ cat seq.txt
banana
apple
pear
orange
[rocrocket@rocrocket programming]$ sort seq.txt
apple
banana
orange
pear

 

uniq命令是一个文本去重命令,它能对标准输入和文本文件进行去重操作,并且能将结果通过stdout输出,uniq命令经常会同sort命令一起使用,uniq命令默认对多条重复的行只显示一行

-c, --count 在每行记录前显示该行内容的数量
-d, --repeated 仅显示重复的记录行,并且去重 -D, --all-repeated[=delimit-method] 仅显示重复的行,并不去重 -f, --skip-fields=N avoid comparing the first N fields
-i, --ignore-case 去重显示,uniq的默认参数 -s, --skip-chars=N 指定忽略行的前N个字符
-u, --unique 仅显示非重复的行 -z, --zero-terminated 末尾生成0个字节的终止符作为输出(\0),这样的目的就是避免一条记录行因为存在空格被识别为多行 -w, --check-chars=N 只对比指定的N个字符,默认是从开始算起,如果和-s一起使用那么要排除-s指定的字符数

 

配合使用:

shell 统计一个文本文件中,出现次数最多的ip地址,并打印对应的ip和出现的次数

可以使用以下命令来统计文本文件中出现次数最多的 IP 地址:

```
awk '{print $1}' demo.txt | sort | uniq -c | sort -nr | head -n 1
```

这个命令的含义是:

1. 使用 awk 工具打印每行的第一个字段,也就是 IP 地址;
2. 使用 sort 对.IP 地址进行排序;
3. 使用 uniq -c 统计每个 IP 地址出现的次数,并加上一个数值前缀;
4. 使用 sort -nr 按照出现的次数进行倒序排序;
5. 使用 head -n 1 取最高出现次数的 IP 地址。

输出结果将包含两个字段,第一个字段是 IP 出现的次数,第二个字段是对应的 IP 地址。例如:

```
4 192.168.1.100
```

这个结果表示,在 demo.txt 文件中, IP 地址 192.168.1.100 出现了 4 次。

posted @   Rain009  阅读(391)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示