Linux命令备忘实例(6)——排序和基本统计命令

同文本文件打交道的过程中,会遇到各种各样的与重复和顺序相关的任务,比较常用的就是sort、uniq,然后对文本的基本统计就是wc这个工具了。sort命令能够对文件和stdin进行各种排序,uniq一般与sort结合使用来提取单一的行。sort和uniq结合能够用来查找重复数据。

1.sort

1.概览

sort按照指定的参数进行排序,支持按照数字排序和字典顺序排序。
排序的选项如下:
这里写图片描述
其中选项“-n”是使用数字进行排序(默认是按照文字字典顺序排序的)。还有更多额外选项可供选择:
这里写图片描述

2.特性与实例

1.指定排序字段

对于具有类似表格形式的文件来说,可以给定字段分隔符后,对指定字段进行排序,这是非常有效的功能。其中“-k”指定进行排序的字段,“-t”指定排序字段的分隔符(默认为tab键)。

user@ubuntu:~$ cat /etc/passwd | sort -t ":" -k 3
root:x:0:0:root:/root:/bin/bash
user:x:10:12:.....
....

2.排序顺序指定

sort支持多种排序顺序,-d指定字典顺序,-f忽略大小写,-i忽略不可打印字符,-h依据人类可读数值排序(3K、1G等),-n指定数值排序,-r指定逆序,-R使用随机排序,-M指定按月份排序。

user@ubuntu:~$ sort -nr file.txt
user@ubuntu:~$ sort -M file.txt
user@ubuntu:~$ sort -R file.txt

3.合并和检测

对于一个是否排序过的文件,可以使用-C选项进行检测,另外,对于多个已经排过序的文件,可以使用-m选项进行合并。

user@ubuntu:~$ sort -m sorted1 sorted2
sort -C file;
if [ $? -eq 0 ]; then
    echo sorted!;
else
    echo unsorted!;
fi

2.uniq

在使用sort排序完成之后,对于完全相同的行会连续排列在一起,为了去除这些重复的行,uniq工具就是专为此准备的:将连续的重复行删除只显示一行。

1.概览

这里写图片描述
uniq只能使用排序过的数据输入,因此uniq要么使用管道,要么使用排序过的文件,以这种方式与sort命令结合起来使用。

2.特性实例

除了基本的从排过序的文件中去除重复行的功能外,还提供了其他选项增强了这个命令的功能。-u选项只输出唯一的行,-d选项只输出重复的行,-c选项可以为每一行加上出现的次数的前缀。

user@ubuntu:~$ echo -e "bash\ntest\ntest\nroot" | uniq -u
bash
root
user@ubuntu:~$ echo -e "bash\ntest\ntest\nroot" | uniq -d
test
user@ubuntu:~$ echo -e "bash\ntest\ntest\nroot" | uniq -c
    1 bash
    2 test
    1 root

使用上述的-c选项就可以有多重活用,最常用的就是统计文件词频信息,基本步骤就是将文件所有连续空格压缩为一个,然后将所有空格替换为换行符使得每一个单词变为单独一行。最后使用sort进行排序使得相同单词连续排布以及uniq -c进行统计。

user@ubuntu:~$ echo -e "bash\ntest a bash\ntest\nroot" | tr -s ' ' '\n' | sort | uniq -c
    1 a
    2 bash
    1 root
    2 test

另外可以使用-s和-w来指定键:-s跳过前N个字符,-w指定用于比较的最大字符数。这样就可以对某个字段进行排序了。
最后一个实例,可以使用uniq得出字符串样式。任何一个字符串,只要一个字符重复出现就在前面加上它出现过的次数。

user@ubuntu:~$ echo abcbhdccd | sed 's/[^\n]/&\n/g' | sed '/^$/d' | sort | uniq -c | tr -d ' \n'
1a2b3c2d1h

3.wc

wc命令就是word count的简称,顾名思义就是对文件进行基本的单词统计。

1.概览

这里写图片描述
wc的默认是按照行数、单词、字符、字节、最长的行的长度这个顺序打印出文件的统计信息。从上述选项中可以看出,我们可以指定不所需要的信息输出。

2.实例

不管是指定一个还是多个需要输出的选项,各自的输出相对顺序是不变的。

user@ubuntu:~$ echo -e "this is a new line \nsecond line" | wc -l
2
user@ubuntu:~$ echo -e "this is a new line \nsecond line" | wc -w
7
user@ubuntu:~$ echo -e "this is a new line \nsecond line" | wc -c
32
user@ubuntu:~$ echo -e "this is a new line \nsecond line" | wc -L
19
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值