2.9 排序、唯一与重复

《Linux Shell 脚本攻略(第 2 版)》读书笔记

sort命令既可以从特定的文件,也可以从 stdin 中获取输入,并将输出写入 stdout。

uniq的工作方式和sort一样。但要求输入的数据必须经过排序

基本用法

1. 对一组文件的内容进行排序

# 方法1
sort file1.txt file2.txt > sorted.txt

# 方法2
sort file1.txt file2.txt -o sorted.txt

# 方法3
sort file{1..2}.txt > sorted.txt

2. 按照数字顺序进行排序

sort -n file.txt

3 按照逆序进行排序

sort -r file.txt

4. 按照月份进行排序

sort -M file.txt

注意:对于 中文的月份(一月、二月、三月) 是如法进行正常排序的!

5. 合并两个已排序过的文件

sort -m sorted1 sorted2

注意:这里加上 -m 之后就不会对原文件 sorted1 sorted2 进行排序,而是只会对两个文件之间的值进行比较,从而起到提高效率的作用。

6. 对文件内容进行排序,并去除重复行

sort file1.txt file2.txt | uniq

7. 检查文件是否已经排序过

#!/bin/bash

sort -C filename
if [ $? -eq 0 ]; then
  echo Sorted
else
  echo Unsorted
fi

如果文件已经排序,sort会返回为 0 的退出码($?),否则返回非 0。

8. 将文件排过序之后再保存到原文件中

$ sort file.txt > file.txt
# 如果执行上面这条命令的话,会导致 file.txt 文件中的内容被清空
# 如果有这个需求的话,执行下面这条命令可以正常实现功能
$ sort file.txt -o file.txt

补充内容

1. 依据键或列进行排序

将下面的文本文件排序:

$ cat data.txt
1  mac    2000
2  winxp  4000
3  bsd    1000
# 依据第1列,以逆序形式排序
$ sort -nrk 1 data.txt
4  linux  1000
3  bsd    1000
2  winxp  4000
1  mac    2000
# -nr 表明按照数字,采用逆序形式排序

# 依据第2列进行排序
$ sort -k 2 data.txt
3  bsd    1000
4  linux  1000
1  mac    2000
2  winxp  4000

将特定范围内的一组字符作为键,进行排序

$ cat data2.txt
1010stweg
5749twtld
4569nzqin

# 将每行中从第2到第4个字符作为数字进行排序
$ sort -nk 2,4 data2.txt
1010stweg
4569nzqin
5749twtld

使 sort 的输出与以\0作为定界符 xargs 命令相兼容

$ sort -z data.txt | xargs -0
# 定界符 `\0` 用来保证 xargs 命令的使用安全

忽略文件中的前导空白字符

$ cat data3.txt
a
 c
  b

$ sort -bd data3.txt
a
  b
 c
  • -b 用于忽略文件中的前导空白
  • -d 用于指明以字典序列进行排列

2. uniq

消除重复内容

$ cat sorted.txt
bash
foss
hack
hack

$ uniq sorted.txt
bash
foss
hack

或者

sort unsorted.txt | uniq

只显示唯一的行(在输入文件中没有重复出现的行)

$ uniq -u sorted.txt
bash
foss

或者

sort unsorted.txt | uniq -u

统计各行在文件中出现的次数

$ uniq -c sorted.txt
   1 bash
   1 foss
   2 hack

找出文件中重复的行

$ uniq -d sorted.txt
hack

结合-s-w来指定键

  • -s指定可以跳过前n个字符
  • -w指定用于比较的最大字符数(此选项 OS X 系统中没有)
$ cat data.txt
u:01:gnu
d:04:linux
u:01:bash
u:01:hack

$ sort data.txt | uniq -s 2 -w 2
d:04:linux
u:01:bash

删除文件中列出的所有文件

$ uniq -z file.txt | xargs -0 rm
# 这里要注意的还是 xargs 的输入必须使用`\0`作为定界符
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,099评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,828评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,540评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,848评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,971评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,132评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,193评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,934评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,376评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,687评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,846评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,537评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,175评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,887评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,134评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,674评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,741评论 2 351

推荐阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,266评论 0 9
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,380评论 0 5
  • 基础命令 主要的命令和快捷键 Linux系统命令由三部分组成:cmd + [options]+[operation...
    485b1aca799e阅读 1,092评论 0 0
  • 秘书为什么要经受得住透支体力 一般人认为秘书工作就是脑力劳动、秀才活儿,坐在办公室里看看文件、写写材料、打打电话、...
    秘书有心得阅读 697评论 0 2
  • 关于爱情 大学时期的闺蜜过来上海出差,聊聊陈年往事,也感叹一下时光飞逝。闺蜜说:你不说话的时候特别迷人!我翻了个白...
    牧牧牧牧牧小笛阅读 199评论 0 0