手机
当前位置:查字典教程网 >脚本专栏 >linuxshell >Shell脚本学习指南之文本处理工具
Shell脚本学习指南之文本处理工具
摘要:4.1排序文本4.1.1行的排序未提供命令行选项时,整个记录会根据当前locale所定义的次序排序。在传统的Clocale中,也就是ASCI...

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="nn" '{ 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脚本学习指南之文本处理工具】相关文章:

Shell脚本批量清除Nginx缓存

Shell脚本实现IP地址合法性判断

shell脚本echo输出不换行功能增强实例

在 Shell 提示符中显示 Git 分支名称的方法

对Shell 脚本加密的方法

Shell脚本实现ftok函数

shell脚本学习与总结

Shell处理带空格的文件名的方法

编写shell脚本将VPS上的数据备份到Dropbox网盘的方法

Linux Shell脚本面试25问集合

精品推荐
分类导航