当前位置:  操作系统/服务器>linux

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

    来源: 互联网  发布时间:2014-10-13

    本文导语:  4.1 排序文本 4.1.1 行的排序未提供命令行选项时,整个记录会根据当前locale所定义的次序排序。在传统的C locale中,也就是ASCII顺序。 4.1.2 以字段排序-k选项的后面接着的是一个字段编号,或者是一对数字。每个编号后面都可以...

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

    
 
 

您可能感兴趣的文章:

  • Linux C编程一站式学习,高级shell Bash脚本编程指南,
  • shell脚本学习指南[一](Arnold Robbins & Nelson H.F. Beebe著)
  • shell脚本学习指南[六](Arnold Robbins & Nelson H.F. Beebe著)
  • Shell脚本学习指南之查找与替换介绍
  • shell脚本学习指南[二](Arnold Robbins & Nelson H.F. Beebe著)
  • shell脚本学习指南[五](Arnold Robbins & Nelson H.F. Beebe著)
  • shell脚本学习指南[三](Arnold Robbins & Nelson H.F. Beebe著)
  • shell脚本学习指南[四](Arnold Robbins & Nelson H.F. Beebe著)
  • shell脚本如何调用另外一个shell脚本的函数?
  • 急救!关于Shell脚本删除过期文件的问题,Shell脚本达人乱入
  • shell 脚本中命令别名在脚本外无法使用
  • 傻瓜问题,请问shell编程和shell脚本编程的关系
  • C语言调用shell脚本后,通过何种方法能获取脚本中变量的值
  • 想用shell脚本定时执行另一个脚本
  • 一个shell执行另一个带参数shell脚本????????????
  • 如何给shell脚本加密,脚本中有密码。最好是比较直接的,不要说让用 shc
  • Shell脚本调用Sql脚本并向其中传递变量
  • 请问,Shell中如何执行另外一个Shell脚本?
  • 如何传递参数给linux shell 脚本(当脚本从标准输入而不是从文件获取时)
  • nohup执行的shell脚本,全局变量不能传递到脚本中使用吗?
  • cd、zip等命令在shell提示符下能执行,在shell脚本中为什么不能执行呢?
  • shell脚本问题 关于父脚本和子脚本的问题
  • shell脚本错误输出
  • 请教shell脚本启动程序
  • 关于shell脚本的。
  • 关于arm linux下的别名配置脚本如何在进入用户时让shell执行的问题,如bashrc,profile,.bash_profile等脚本,寻求高手解答
  • 高分请教关于Shell脚本执行中断问题?
  • linux shell脚本
  •  
    本站(WWW.169IT.COM)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.169IT.COM)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux bash shell命令:grep文本搜索工具简介
  • 使用shell在文本文件中进行字符串搜索问题?shell高手请进,分不够可以再加
  • linux bash shell命令:文本搜索工具grep中用于egrep和 grep -E的元字符扩展集
  • 急问:怎么将一个文本文件平均拆分成10个文本文件?在shell里面怎么实现?谢谢
  • linux bash shell命令:文本搜索工具Grep命令选项及实例
  • Shell编程:如何在一个文本文件中的第N行插入一行文本?
  • linux bash shell命令:文本搜索工具grep正则表达式元字符集(基本集)
  • shell 编程关于 文本格式转换问题
  • 在LINUX下做文本处理的工作,一般是用SHELL脚本还是动态语言方便?
  • shell中读取一个文本文件将内容按行保存成数组变量
  • 请教shell的问题,关于文本文件的修改和添加
  • 请问在文本终端下,怎么用shell命令使网卡发送数据?
  • 关于shell编程的文本处理
  • 【在线急等求助】UNIX-shell程序,对文本文件进行操作
  • 求一段查询并替换文本字符的shell脚本
  • hp unix: shell 或 AWK 怎样给一行文本记录加上回车换行符呀(rn) ?
  • 如何用shell替换文本中指定的字符串,在线等,急,请各位大侠帮忙!
  • 请问如何用shell脚本将一个文本文件的某几行输入到另一个文件中。
  • 请问如何用shell来读写文本文件呢?
  • shell命令:用sed如何删除一个文本文件的所有行
  • 跪求:shell如何替换文本中匹配的一行
  • Centos6下安装Shell下文件上传下载rz,sz命令
  • 不同类型的shell*(K SHELL , C SHELL) 用命令怎么切换?
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • 我在执行shell时,想在shell里直接向mysql数据库插入数据,我该如何写shell。
  • 菜鸟问问题:shell是什么呢?普通的ls、cp、pwd这些命令算不算shell呢?如何把自己写的文件变成shell呢?
  • shell变量和子shell的问题请教
  • 请问“当前shell”和“子shell”的区别?
  • 怎么知道当前是B_SHELL 还是C_SHELL
  • 用户登陆后运行某SHELL退出SHELL就回到LOGIN是怎么作到的?
  • 怎么写shell代码 写好shell怎么运行?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2019,169IT.COM,E-mail:www_169it_com#163.com(请将#改为@)

    浙ICP备11055608号-3