课题研究常用方法怎么写 课题研究常用方法


文本分析(课题研究常用方法)
awk是流式编辑器,针对文档中的行来操作,一行一行地执行 。awk可以非常方便、高效地操作文档以及字符,从而实现我们想要的格式 。它的功能非常强大,我在 shell 脚本中经常使用它来处理字符串 。下面介绍几个在工作中使用awk较频繁的用法 。
1. 截取文档中的某个段

课题研究常用方法怎么写 课题研究常用方法

文章插图
示例命令如下: # head -n2 test.txt |awk -F ':' '{print $1}'root
bin
本例中,-F选项的作用是指定分隔符 。如果不加-F选项,则以空格或者tab为分隔符 。print为打印的动作,用来打印某个字段 。$1为第 1 个字段,$2为第 2 个字段,以此类推 。但$0比较特殊,它表示整行: # head -n2 test.txt |awk -F':' '{print $0}'root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologin
注意 awk的格式,-F后面紧跟单引号,单引号里面为分隔符 。print的动作要用{}括起来,否则会报错 。print还可以打印自定义的内容,但是自定义的内容要用双引号括起来,如下所示: # head -n2 test.txt |awk -F ':' '{print $1"#"$2"#"$3"#"$4}'root#x#0#0bin#x#1#1
2. 匹配字符或者字符串
在文档中过滤出包含指定字符串的行,示例命令如下: # awk '/oo/' test.txtroot:x:0:0:root:/root:/bin/bashlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0perator:/root:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin setroubleshoot:x:992:990::/var/lib/setroubleshoot:/sbin/nologin
这跟 sed的用法类似,能实现grep的功能,但没有颜色显示,肯定没有grep用起来方便 。不过awk还有比sed更强大的匹配,如下所示: # awk -F ':' '$1 ~/oo/' test.txtroot:x:0:0:root:/root:/bin/bashsetroubleshoot:x:992:990::/var/lib/setroubleshoot:/sbin/nologin
它可以让某个段去匹配,这里的~就是匹配的意思 。
此外,awk还可以多次匹配,如下所示: # awk -F ':' '/root/ {print $1,$3} /test/ {print $1,$3}' test.txtroot 0operator 11test 1006
本例中,awk匹配完root,再匹配test,并且只打印所匹配的段 。
3. 条件操作符
有时候,在匹配字符的同时要给出限定条件,比如第 3 段为 0 。示例命令如下: # awk -F ':' '$3=="0"' /etc/passwdroot:x:0:0:root:/root:/bin/bash
在 awk中,我们可以用逻辑符号进行判断,比如==就是等于,也可以理解为精确匹配 。另外,还有>、>=、、、!=等 。值得注意的是,在和数字比较时,若把要比较的数字用双引号引起来,那么 awk 不会将其认为是数字,而会认为是字符,不加双引号就会认为是数字 。示例命令如下: # awk -F ':' '$3>="500"' /etc/passwd |head -n 5shutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinnobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologindbus:x:81:81:System message bus:/:/sbin/nologin
本例中,阿铭本想把 uid 大于等于 500 的行打印出来,但是结果并不理想 。这是因为 awk把所有的数字都当作字符了,就跟上一章中提到的sort排序原理一样 。但是,如果不加双引号,就得到了想要的结果: # awk -F ':' '$3>=500' /etc/passwd|head -n 5nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologinsystemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologinpolkitd:x:998:996:User for polkitd:/:/sbin/nologingeoclue:x:997:995:User for geoclue:/var/lib/geoclue:/sbin/nologinunbound:x:996:991:Unbound DNS resolver:/etc/unbound:/sbin/nologin # awk -F ':' '$7!="/sbin/nologin"' /etc/passwdroot:x:0:0:root:/root:/bin/bashsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltaminglinux:x:1000:1000:aminglinux:/home/aminglinux:/bin/bash
上例中,!=表示不匹配,它除了针对某一个段的字符进行逻辑比较外,还可以在两个段之间进行逻辑比较 。如下所示: # awk -F ':' '$3


特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。