文本分析(课题研究常用方法)
文本分析(课题研究常用方法)
awk是流式编辑器,针对文档中的行来操作,一行一行地执行。awk可以非常方便、高效地操作文档以及字符,从而实现我们想要的格式。它的功能非常强大,我在 shell 脚本中经常使用它来处理字符串。下面介绍几个在工作中使用awk较频繁的用法。
1. 截取文档中的某个段
示例命令如下:#head-n2test.txt|awk-F':''{print$1}'root bin
本例中,-F选项的作用是指定分隔符。如果不加-F选项,则以空格或者tab为分隔符。print为打印的动作,用来打印某个字段。$1为第 1 个字段,$2为第 2 个字段,以此类推。但$0比较特殊,它表示整行:#head-n2test.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-n2test.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/nologinpostfix:x:89:89::/var/spool/postfix:/sbin/nologinsetroubleshoot: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.txtroot0operator11test1006
本例中,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-n5shutdown: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:KernelOverflowUser:/:/sbin/nologindbus:x:81:81:Systemmessagebus:/:/sbin/nologin
本例中,阿铭本想把 uid 大于等于 500 的行打印出来,但是结果并不理想。这是因为awk把所有的数字都当作字符了,就跟上一章中提到的sort排序原理一样。但是,如果不加双引号,就得到了想要的结果:#awk-F':''$3>=500'/etc/passwd|head-n5nobody:x:65534:65534:KernelOverflowUser:/:/sbin/nologinsystemd-coredump:x:999:997:systemdCoreDumper:/:/sbin/nologinpolkitd:x:998:996:Userforpolkitd:/:/sbin/nologingeoclue:x:997:995:Userforgeoclue:/var/lib/geoclue:/sbin/nologinunbound:x:996:991:UnboundDNSresolver:/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
另外,还可以使用&&和||,它们分别表示"并且"和"或者"。&&的用法如下:#awk-F':''$3>"5"&&$3
||的用法如下:#awk-F':''$3>1000||$7=="/bin/bash"'/etc/passwdroot:x:0:0:root:/root:/bin/bashnobody:x:65534:65534:KernelOverflowUser:/:/sbin/nologinaminglinux:x:1000:1000:aminglinux:/home/aminglinux:/bin/bash
4. awk 的内置变量
awk常用的变量有OFS、NF和NR。OFS和-F选项有类似的功能,也是用来定义分隔符的,但是它是在输出的时候定义的。NF表示用分隔符分隔后一共有多少段。NR表示行号。
OFS的用法示例如下:#head-5/etc/passwd|awk-F':''{OFS="#"}{print$1,$3,$4}'root#0#0bin#1#1daemon#2#2adm#3#4lp#4#7
还有更高级一些的用法:#awk-F':''{OFS="#"}{if($3>=1000){print$1,$2,$3,$4}}'/etc/passwdnobody#x#65534#65534aminglinux#x#1000#1000
变量NF的具体用法如下:#head-n3/etc/passwd|awk-F':''{printNF}'777#head-n3/etc/passwd|awk-F':''{print$NF}'/bin/bash /sbin/nologin /sbin/nologin
这里NF是多少段,$NF是最后一段的值。变量NR的具体用法如下:#head-n3/etc/passwd|awk-F':''{printNR}'123
我们还可以使用NR作为判断条件,如下所示:#awk'NR>40'/etc/passwdinsights:x:978:976:RedHatInsights:/var/lib/insights:/sbin/nologinsshd:x:74:74rivilege-separatedSSH:/var/empty/sshd:/sbin/nologinavahi:x:70:70:AvahimDNS/DNS-SDStack:/var/run/avahi-daemon:/sbin/nologintcpdump:x:72:72::/:/sbin/nologinaminglinux:x:1000:1000:aminglinux:/home/aminglinux:/bin/bash
NR也可以配合段匹配一起使用,如下所示:#awk-F':''NR
5. awk 中的数学运算
awk可以更改段值,示例命令如下:#head-n3/etc/passwd|awk-F':''$1="root"'rootx00root/root/bin/bashrootx11bin/bin/sbin/nologinrootx22daemon/sbin/sbin/nologin
awk也可以对各个段的值进行数学运算,示例命令如下:#head-n2/etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologin#head-n2/etc/passwd|awk-F':''{$7=$3+$4}'#head-n2/etc/passwd|awk-F':''{$7=$3+$4;print$0}'rootx00root/root0binx11bin/bin2
awk还可以计算某个段的总和,示例命令如下:#awk-F':''{(tot=tot+$3)};END{printtot}'/etc/passwd84699
这里的END是awk特有的语法,表示所有的行都已经执行。如下所示:#awk-F':''{if($1=="root"){print$0}}'/etc/passwdroot:x:0:0:root:/root:/bin/bash
其实awk可以写成一个脚本文件,而且有它特有的语法。在awk中使用if判断、for循环都可以,只是在日常管理工作中,使用那么复杂的语句并不常见。
最后,我们再附上常见正则字符的解释。
.表示任意一个字符,比如空格、特殊符号等。
*表示*前面的字符有 0 个或多个,比如a*那就是 0 个a或者多个a。
.*表示任意个任意字符,就是贪婪匹配了。
+就是+前面的字符有 1 个或者多个,如a+就是a、aa、aaa……
?就是?前面的字符有 1 个或者 0 个。
{ }里面是一个范围,如{1,5}就是{ }前面的字符有 1~5 个。
|表示或者,如a|b就是a或者b。
表示这里面的任意一个字符,如[abc]就是a或者b或者c。此外,也可以用范围[0-9]表示任意一个数字,用[a-z]表示任意一个小写字母。
shadow是什么意思(shadow英文名)小清新不做作英文网名2021,小仙女的英文网名带翻译Toxic茴忆Richer涼城iContentious(矫情)深渊Nefertarirelieved释然expecto奢望gol
什么是廉租房(廉租房到底能不能装修)幸福里百科词条公租房是指公共租赁住房,由政府投资或政府提供政策支持的其他投资主体,用低于市场价向住房困难的群体出租。廉租房是指政府以租金补贴或实物配租的方式,向符合城镇居民最低生活
hotel是什么意思(hotelhome什么意思)hotel几个重要习惯搭配1。表示在旅馆,可用介词in或at。如Wemetatthehotel。我们是在一家旅馆见面的。汉语中说住旅馆,英语可用putupstayat(in)aho
韬光养晦是什么意思是什么(韬光养晦是最可怕的)曾几何时华为的芯片研发让高通的CEO们都刮目相看。过去的二年华为手机高歌猛进,且看2019年4月15日,在去年华为超越苹果成为全球第二大手机销量厂商后,余承东多次的站出来表示不久的
歇斯底里什么意思(乖巧的意思)清华大学附属北京清华长庚医院副院长神经中心主任医师王劲最新的神经科门诊调查显示,约13病人的症状不能用现有医学知识解释,包括震颤抽搐瘫痪昏迷等,多见于女性,但不分种族及年龄。这类怪
什么是布病(牛羊布病的症状)我们说的牛布病就是牛布氏杆菌病,它是一种人畜共患的慢性传染病。它是由感染布氏杆菌病毒引起的,主要攻击牛的生殖系统,因此导致母牛流产不孕公牛发生睾丸炎不育。布氏杆菌的抵抗力比较强,可
马子是什么意思(香港为什么叫女朋友马子)今天在街上等车,看到几个年轻人在说话,其中一人不认识对方带的女性同伴,就问对方,对方很酷的回答这是我马子!然后就见那个女孩有点害羞,但非常甜蜜的表情显然认同了男孩的说法。我当时,就
五经指什么(五经科第是指什么)科举制度出现之前,我国人才选拔制度,主要采用世袭制,察举制和举孝廉制,贵族和世家大族出身的子弟,逐渐垄断了朝中的重要官职,形成了上品无寒门,下品无士族的局面,隋朝时期,开始采用科举
小贵族涉嫌抄袭没事?M。Benz被仿冒却考虑撤销提告于2007年法兰克福车展前的一项法律行动可能在近期宣告落幕,当时M。Benz提出禁制令扣留一部打算参展的中国製汽车,他们认为这部名为小贵族的新车涉嫌抄袭了该集团SmartForTw
如虎添翼的意思是什么(如虎添翼是褒是贬)明察秋毫形容人能洞察一切,也指视力很好。按图索骥有两层感情色彩,作为中性词,比喻根据线索去寻找或追究事物用于贬义,指死守线索,不知变通。循序渐进指按照一定的步骤逐渐深入或提高,侧重
精子是什么颜色(为什么做完后流出很多液体)精液常规分析包括精液外观精液体积液化时间PH黏稠度精子凝集精子浓度与总数精子活力与活动率分析。精液常规分析应在精液液化不久后立即开始,最好在射精后30分钟时,不要超过1小时,以避免
日本可以买什么(日本口碑最好的护肤品有哪些)小时候穿到爸爸妈妈买的新衣服就非常的开心现在感觉收到爱人买的化妆品就非常高兴随着年龄的增长礼物在改变,但这份开心的心情没有改变让植田纪纪住你的美植田纪日本一线美容院品牌无论是基础清
名歌有哪些(民歌经典大全100首)回复诗词,送您诗词创作小技巧民歌,歌颂着五颜六色的生活,吟唱着悲欢离合的情缘记录了起起伏伏的过往每一首都值得我们用心聆听!那些祝福对别人的祝福,是最容易表达的善意。把这些祝福,谱成
经典歌曲有哪些(中国最好听的100首歌曲)大约在冬季齐秦同桌的你老狼一千个伤心的理由张学友星星点灯郑智化水手郑智化梦醒时分陈淑桦伤心太平洋任贤齐爱就一个字张信哲忘情水刘德华宁夏梁静茹黄昏周传胸一生有你水木年华挪威的森林伍佰
什么软件可以查房记录(怎么查开酒店记录查询)什么软件可以查房记录(怎么查开酒店记录查询)相信大家基本也都是成年人了,在年轻的时候都是出入过各大酒店一起为爱鼓掌的人了。你逐渐的成长喜欢上平静的日子后,直到偶然的一天,你在APP
怎样做好网络销售(什么是网络营销?)怎样做好网络销售(什么是网络营销?)(一)网络营销的定义是以互联网为核心平台,以网络用户为中心,以市场需求和认知为导向,利用各种网络应用手段去实现企业营销目的一系列行为。(二)网络
如何做好秘书(怎样做好秘书工作600字)秘书,百科里的解释为协助领导人处理综合情况调查研究联系接待办理文书和交办事项。在我看来,工作秘书的主要职责是隐秘在幕后,有一定文字功底的人员。关于如何做好秘书工作,已有很多前辈总结
今日山东蛋价行情,铝价行情走势图为国内钢铁企业。打开APP。所有铝价格均为参考价格。我的钢铁今日价格网免费提供今日钢材价格查询包含钢材今日价格钢材价格最新报价钢材行情走势等信息。元吨。铝材阳极氧化铝。所有铝价格均
LevelHome宣布推出新型高级智能锁LevelTouch近日新型高级智能锁LevelTouch登录了热搜,也是在网上引起了网友们的关注,那么很多小伙伴可能还不清楚具体的情况如何,小编也是在网上查阅了一些信息,那么接下来就分享给大家来了解
AGL宣布推出智能家居套件以帮助降低电费澳大利亚能源提供商AGL宣布了一系列智能家居套件,据称它们将通过自动化功能帮助人们减少能源消耗。该公司在周三的一份声明中说,这些套件包括声控灯,能量监控插头,用于分体式空调系统的智
智能网关设备(智能网关是什么东西)智能网关设备(智能网关是什么东西)在科技发达的今天,我们的生活也开始趋向于智能化,智能家居已经迎来了新时代。电动窗帘扫地机器人电视空调等电器都能智联wifi,可是使用的时候得一个个
TOYOTA展间全面导入VR科技打造崭新数位体验VR(VirtualReality虚拟实境)近年来为最热门的新科技之一,透过VR科技,使用者可以突破时间与空间的限制,透过一个虚拟世界,体验现实生活不易模拟的情境。TOYOTA总代