`
txf2004
  • 浏览: 6872475 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

《Shell脚本学习指南》第四章 文本处理工具

 
阅读更多


4.1 排序文本

4.1.1 行的排序

未提供命令行选项时,整个记录会根据当前locale所定义的次序排序。
在传统的C locale中,也就是ASCII顺序。


4.1.2 以字段排序

-k选项的后面接着的是一个字段编号,或者是一对数字。
每个编号后面都可以接一个点号的字符位置,或修饰符字母。


如果仅指定一个字段编号,则排序键值会自该字段的起始处开始,
一直继续到记录的结尾(而非字段的结尾)。

如果给的是一对用逗号隔开的字段数字,则排序键值将由第一个字段值的起始处开始,
结束于第二个字段值的结尾。使用点号表示字符位置。
-k2.4, 5.6指的是从第二个字段的第四个字符开始比较,一直比到第五个字段的第六个字符。

$ sort -t: -k1,1 /etc/passwd 以用户名称排序
bin:x:1:1:bin:/bin:/sbin/nologin
chico:x:12501:1000:Chico Marx:/home/chico:/bin/bash
harpo:x:12502:1000:Harpo Marx:/home/harpo:/bin/ksh
...

$ sort -t: -k3,3nr /etc/passwd 反省UID排序
或-k3nr,3或-k3,3 -n -r都可以。


4.1.3 文本块的排序

有时需要对多行记录组合而成的数据排序。以地址清单为例:
$ cat my-friends
# SORTKEY: Schlo, Hans Jurgen
Hans Jurgen Schlo
Unter den Linden 78
D-10117 Berlin
Germany

# SORTKEY: Jones, Adrian
...

技巧是:利用awk识别段落间隔,在每个地址内暂时使用一个未用过的字符取代分行。
sort看到的行就会变成这样:
# SORTKEY: Schlo, Hans Jurgen^ZHans Jurgen Schlo^ZUnter den Linden 78^Z...

cat my-friends | 读取地址文件
awk -v RS=" " '{ gsub("\n", "^Z"); print }' | 转换地址为单行
sort -f | 排序地址数据,忽略大小写
awk -v ORS="\n\n" '{ gsub("^Z", "\n"); print }' | 恢复行结构
grep -v '# SORTKEY' 删除标记行

1. 函数gsub()为全局性替换(global substitution),类似sed下的s/x/y/g结构。
2. RS变量时输入数据的记录分隔器(Record Separator)。
通常输入数据以换行隔开,使每行成为单个记录。
RS=" "是一个特殊用法,指的是记录以空行隔开。
3. ORS是输出记录分隔器。

注:'{ action }'是对每个字段的操作,而RS,ORS都是对记录的设定。


4.1.5 sort的稳定性

sort并不稳定。


4.2 删除重复

sort -u是依据匹配的键值进行消除操作,而非匹配的记录。
uniq有3个好用选项:
-c在每个输出行之前加上该行重复的次数。
-d则用于仅显示重复的行。
-u仅显示未重复的行。


4.3 重新格式化段落

fwt -w 30


4.4 计算行数、字数以及字符数

wc的默认输出是一行报告,包括行数、字数以及字节数。
可用选项:-c(字节数)、-l(行数)、-w(字数)。
$ echo Testing one two three | wc -c
1 4 22
$ wc /etc/passwd /etc/group


4.6 提取开头或结尾数行

显示文件列表中每一个的前n条记录:

head -n n [file(s)]
head -n [file(s)]
awk 'FNR <= n' [file(s)]
sed -e nq [file(s)]
sed nq [file(s)]

观察不断增长的系统信息日志,Ctrl-C停止tail。
$ tail -n 25 -f /var/log/messages

分享到:
评论

相关推荐

    Shell脚本专家指南

    第4章 比较和测试 比较的基本原理 第5章 接受命令行选项、开关和参数 第6章 测试变量和设置默认值 6.1 设置默认值 6.2 变量替换 6.2.1 :=句法 6.2.2 =句法 6.2.3 :-句法 6.2.4 -句法 6.2.5 :?句法 6.2.6 ?句法 ...

    shell编程指南,shell脚本,本书共分五部分全。grep家族,sed,AWK,正则表达式,tr用法

    第16章 shell脚本介绍 151 第17章 条件测试 154 第18章 控制流结构 160 第19章 shell函数 202 第20章 向脚本传递参数 224 第21章 创建屏幕输出 236 第22章 创建屏幕输入 252 第23章 调试脚本 274 第24章 shell嵌入...

    Linux与UNIX Shell编程指南.rar

    第十六章 SHELL脚本介绍 第十七章 条件测试 第十八章 控制流结构 第十九章 SHELL函数 第二十章 向脚本传递参数 第二一章 创建屏幕输出 第二二章 创建屏幕输入 第二三章 调试脚本 第二四章 SHELL嵌入命令 第五部分 ...

    LINUX与UNIX SHELL编程指南

    第四章 文件名置换 第五章 SHELL输入输出 第六章 命令执行顺序 第二部分 文本过滤 第七章 正则表达式介绍 第八章 GERP家族 第九章 AWK介绍 第十章 SED用法介绍 第十一章 合并与分割 第十二章 TR用法 第三部分 登录...

    绝版经典 LINUX与UNIX SHELL编程指南 PDF 高清版 [16.3M]

    第四章 文件名置换 第五章 SHELL输入输出 第六章 命令执行顺序 第二部分 文本过滤 第七章 正则表达式介绍 第八章 GERP家族 第九章 AWK介绍 第十章 SED用法介绍 第十一章 合并与分割 第十二章 TR用法 第三...

    Linux与UNIX Shell编程指南.

    第十六章 SHELL脚本介绍 第十七章 条件测试 第十八章 控制流结构 第十九章 SHELL函数 第二十章 向脚本传递参数 第二一章 创建屏幕输出 第二二章 创建屏幕输入 第二三章 调试脚本 第二四章 SHELL嵌入命令 第五部分 ...

    Shell脚本学习指南之文本处理工具

    4.1 排序文本 4.1.1 行的排序未提供命令行选项时,整个记录会根据当前locale所定义的次序排序。在传统的C locale中,也就是ASCII...-k2.4, 5.6指的是从第二个字段的第四个字符开始比较,一直比到第五个字段的第六个字

    Linux与unix shell编程指南.rar

    第4章 文件名置换 31 第5章 shell输入与输出 34 第6章 命令执行顺序 46 第二部分 文本过滤 第7章 正则表达式介绍 49 第8章 grep家族 56 第9章 AWK介绍 66 第10章 sed 用法介绍 89 第11章 合并与分割 104 第12章 tr...

    shell 编程指南pdf

    第4章 文件名置换 31 4.1 使用* 31 4.2 使用? 32 4.3 使用[...]和[!...] 32 4.4 小结 33 第5章 shell输入与输出 34 5.1 echo 34 5.2 read 35 5.3 cat 37 5.4 管道 38 5.5 tee 39 5.6 标准输入、输出和错误 40 5.6.1...

    LINUX与UNIX_Shell编程指南

    第一部分 shell 第1章 文件安全与权限 第2章 使用find和xargs 第3章 后台执行命令 第4章 文件名置换 第5章 shell输入与输出 第6章 命令执行顺序 ...第16章 shell脚本介绍 第17章 条件测试 等等,内容较多

    LINUX与UNIX SHELL编程指南(很全)

    第4章 文件名置换 31 4.1 使用* 31 4.2 使用? 32 4.3 使用[...]和[!...] 32 4.4 小结 33 第5章 shell输入与输出 34 5.1 echo 34 5.2 read 35 5.3 cat 37 5.4 管道 38 5.5 tee 39 5.6 标准输入、输出和错误 40 5.6.1...

    Linux与Unix Shell编程指南(PDF格式,共30章)

    第4章 文件名置换 31 4.1 使用* 31 4.2 使用? 32 4.3 使用[...]和[!...] 32 4.4 小结 33 第5章 shell输入与输出 34 5.1 echo 34 5.2 read 35 5.3 cat 37 5.4 管道 38 5.5 tee 39 5.6 标准输入、输出和错误 40 5.6.1...

    Linux与unix shell编程指南

    第4章 文件名置换 31 4.1 使用* 31 4.2 使用? 32 4.3 使用[...]和[!...] 32 4.4 小结 33 第5章 shell输入与输出 34 5.1 echo 34 5.2 read 35 5.3 cat 37 5.4 管道 38 5.5 tee 39 5.6 标准输入、输出和错误 40 5.6.1...

    高级Bash脚本编程指南.pdf

    一本深入学习shell脚本艺术的书籍 Mendel Cooper 春敏 杨 - 毅 黄 - 3.9.1 2006年5月26日 这本书假定你没有任何关于脚本或一般程序的编程知识, 但是如果你具备相关的知识, 那么你将很容易就能够达到中高级的...

    SHELL编程指南.pdf

    教会你认识shell脚本,学会编写普通/高级shell脚本。也是linux下shell命令的好教程。 第一部分,介绍shell 第二部分,文本过滤 第三部分,登录环境 第四部分,普通shell编写 第五部分,高级shell编写

    linux与unix shell编程指南

    第4章 文件名置换 31 4.1 使用* 31 4.2 使用? 32 4.3 使用[...]和[!...] 32 4.4 小结 33 第5章 shell输入与输出 34 5.1 echo 34 5.2 read 35 5.3 cat 37 5.4 管道 38 5.5 tee 39 5.6 标准输入、输出和错误 40 5.6.1...

    LINUX与UNIX SHELL编程指南 高清PDF

    第4章 文件名置换 31 4.1 使用* 31 4.2 使用? 32 4.3 使用[...]和[!...] 32 4.4 小结 33 第5章 shell输入与输出 34 5.1 echo 34 5.2 read 35 5.3 cat 37 5.4 管道 38 5.5 tee 39 5.6 标准输入、输出和错误 40 5.6.1...

Global site tag (gtag.js) - Google Analytics