统计 wc / 排序 sort / 重复 uniq

bash中计数好工具

统计行数 wc -l

wc语法:wc [选项]... [文件]...

wc选项:

-c # 统计字节数,或--bytes或——chars:只显示Bytes数;。
-l # 统计行数,或——lines:只显示列数;。
-m # 统计字符数。这个标志不能与 -c 标志一起使用。
-w # 统计字数,或——words:只显示字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。
-L # 打印最长行的长度。
-help     # 显示帮助信息
--version # 显示版本信息

内容排序 sort

sort [OPTION]... [FILE]...

排序选项描述
-b, –ignore-leading-blanks忽略开头的空白。
-d, –dictionary-order仅考虑空白、字母、数字。
-f, –ignore-case将小写字母作为大写字母考虑。
-g, –general-numeric-sort根据数字排序。
-i, –ignore-nonprinting排除不可打印字符。
-M, –month-sort按照非月份、一月、十二月的顺序排序。
-h, –human-numeric-sort根据存储容量排序(注意使用大写字母,例如:2K 1G)。
-n, –numeric-sort根据数字排序
-R, –random-sort随机排序,但分组相同的行。
–random-source=FILE从FILE中获取随机长度的字节。
-r, –reverse将结果倒序排列。
–sort=WORD根据WORD排序,其中:
general-numeric 等价于 -g,
human-numeric 等价于 -h,
month 等价于 -M,
numeric 等价于 -n,
random 等价于 -R,
version 等价于 -V。
-V, –version-sort文本中(版本)数字的自然排序。
其他选项描述
–batch-size=NMERGE一次合并最多NMERGE个输入;超过部分使用临时文件。
-c, –check, –check=diagnose-first检查输入是否已排序,该操作不会执行排序。
-C, –check=quiet, –check=silent类似于 -c 选项,但不输出第一个未排序的行。
–compress-program=PROG使用PROG压缩临时文件;使用PROG -d解压缩。
–debug注释用于排序的行,发送可疑用法的警报到stderr。
–files0-from=F从文件F中读取以NUL结尾的所有文件名称;如果F是 – ,那么从标准输入中读取名字。
-k, –key=KEYDEF通过一个key排序;KEYDEF给出位置和类型。
-m, –merge合并已排序文件,之后不再排序。
-o, –output=FILE将结果写入FILE而不是标准输出。
-s, –stable通过禁用最后的比较来稳定排序。
-S, –buffer-size=SIZE使用SIZE作为内存缓存大小。
-t, –field-separator=SEP使用SEP作为列的分隔符。
-T, –temporary-directory=DIR使用DIR作为临时目录,而不是 $TMPDIR 或 /tmp;多次使用该选项指定多个临时目录。
–parallel=N将并发运行的排序数更改为N。
-u, –unique同时使用-c,严格检查排序;不同时使用-c,输出排序后去重的结果。
-z, –zero-terminated设置行终止符为NUL(空),而不是换行符。
–help显示帮助信息并退出。
–version显示版本信息并退出。
$ cat sort.txt
AAA:BB:CC
aaa:30:1.6
ccc:50:3.3
ddd:20:4.2
bbb:10:2.5
eee:40:5.4
eee:60:5.1

$ sort -nrk 3 -t: sort.txt  # 将CC列数字从大到小顺序排列:-n是按照数字大小排序,-r是以相反顺序,-k是指定需要排序的栏位,-t指定栏位分隔符为冒号
eee:40:5.4
eee:60:5.1
ddd:20:4.2
ccc:50:3.3
bbb:10:2.5
aaa:30:1.6
AAA:BB:CC

$ sort -t ' ' -k 1.2 test.txt # 从公司英文名称的第二个字母开始排序:-k 1.2,表示对第一个域的第二个字符开始到本域的最后一个字符为止的字符串进行排序
baidu 100 5000
sohu 100 4500
google 110 5000
guge 50 3000
# baidu因为第二个字母是a而名列榜首。sohu和google第二个字符都是o,但sohu的h在google的o前面,所以两者分别排在第二和第三

显示或忽略重复的行 uniq

注意:uniq只检测邻近的行是否重复,所有需要先使用sort排序。

uniq [OPTION]... [INPUT [OUTPUT]]

选项描述
-c, –count在每行开头增加重复次数。
-d, –repeated所有邻近的重复行只被打印一次。
-D所有邻近的重复行将全部打印。
–all-repeated[=METHOD]类似于 -D,但允许每组之间以空行分割。
METHOD取值范围{none(默认),prepend,separate}。
-f, –skip-fields=N跳过对前N个列的比较。
–group[=METHOD]显示所有行,允许每组之间以空行分割。
METHOD取值范围:{separate(默认),prepend,append,both}。
-i, –ignore-case忽略大小写的差异。
-s, –skip-chars=N跳过对前N个字符的比较。
-u, –unique只打印非邻近的重复行。
-z, –zero-terminated设置行终止符为NUL(空),而不是换行符。
-w, –check-chars=N只对每行前N个字符进行比较。
–help显示帮助信息并退出。
–version显示版本信息并退出。

wc sort uniq 示例

$ cat test
a
b
c
a
c
d123
中国
# 为文件输入时,在输出时,也会带上文件名。
$ wc -l test
7 test

$ cat test|wc -c
22

$ cat test|wc -m
18

$ cat test|wc -L
4
$ sort test
a
a
b
c
c
d123
中国

$ sort -u test
a
b
c
d123
中国
$ sort test|uniq -c
      2 a
      1 b
      2 c
      1 d123
      1 中国

$ sort test|uniq -c|sort -nr
      2 c
      2 a
      1 中国
      1 d123
      1 b

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注