linux下字符串处理工具二:awk(1)

news/2024/7/5 4:11:52

awk工作原理

原理图

第一步:awk对文件或管道的内容一次只处理一次,将获取到的这一行赋给内部变量$0。
这里写图片描述
第二步:这一行的内容按awk内部变量FS定义的分隔符,缺省为空格(包括tab制表符)分解成字段,每一段存储在从$1开始的变量中。
这里写图片描述
第三步:awk中print命令打印字段;{print $1,$3} 只取有用的第一段和第三段;在打印时$1和$3之间由空格间隔。“,”逗号是一个映射到内部的输出字段分隔符(OFS),OFS变量缺省为空格,逗号在输出时被空格替换。接下来,awk处理下一行数据,直到所有的行处理完。
例子:
截取部分/etc/passwd的内容在5.txt 中作为例子

➜  awkstudy  cat 5.txt
_spotlight:*:89:89:Spotlight:/var/empty:/usr/bin/false
_tokend:*:91:91:Token Daemon:/var/empty:/usr/bin/false
_securityagent:*:92:92:SecurityAgent:/var/db/securityagent:/usr/bin/false
_calendar:*:93:93:Calendar:/var/empty:/usr/bin/false
_teamsserver:*:94:94:TeamsServer:/var/teamsserver:/usr/bin/false

打印所有的5.txt的内容

awk '{print $0}' 5.txt 或者
awk '{print}' 5.txt

代码块 {print} 单独出现的时候,会打印一整行的东西={print $0}

awk '{print ""}' 5.txt

会打印出与5.txt中行数相等的空行

awk '{print "hello"}' 5.txt

会打印出与5.txt行数相等的hello

基本示例

入门例子

awk -F":" '{print $1,$4}' 5.txt
_spotlight 89
_tokend 91
_securityagent 92
_calendar 93
_teamsserver 94
awk -F":" '{print $1 $4}' 5.txt
_spotlight89
_tokend91
_securityagent92
_calendar93
_teamsserver94
awk -F":" '{ print "username: " $1 "\t\tuid:" $3 }' 5.txt
username: _spotlight        uid:89
username: _tokend       uid:91
username: _securityagent        uid:92
username: _calendar     uid:93
username: _teamsserver      uid:94

awk内建变量

awk内建变量

用法示例

设置字段分隔符号(FS使用方法)

awk 'BEGIN{FS=":"}{print NR,$1,$NF}' 5.txt
或者:
awk -F":" '{print NR,$1,$NF}' 5.txt

记录条数(NR,FNR使用方法)

awk -F":" '{print NR,$1,$NF}' /etc/passwd

设置输出字段分隔符(OFS使用方法)

awk 'BEGIN{FS=":";OFS="^^"}/^root/{print FNR,$1,$NF}' /etc/passwd
12^^root^^/bin/sh

设置输出行记录分隔符(ORS使用方法)

awk 'BEGIN{FS=":";ORS="^^"}{print FNR,$1,$NF}' 5.txt

输入参数获取(ARGC ,ARGV使用)

awk 'BEGIN{FS=":";print "ARGC="ARGC;for(k in ARGV) {print k"="ARGV[k]; }}' 5.txtARGC=2
0=awk
1=5.txt

获得linux环境变量(ENVIRON使用)

awk 'BEGIN{print ENVIRON["PATH"];}'
/Users/enyilr/.jenv/bin:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin:/Users/enyilr/javatools/apache-maven-3.3.3/bin:/Users/enyilr/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

ENVIRON是子典型数组,可以通过对应键值获得它的值。

RSTART RLENGTH使用

awk 'BEGIN{start=match("this is a test",/[a-z]+$/); print start, RSTART, RLENGTH }'
11 11 4
awk 'BEGIN{start=match("this is a test",/^[a-z]+$/); print start, RSTART, RLENGTH }'
0 0 -1

RSTART 被匹配正则表达式首的位置,RLENGTH匹配字符长度,没有找到为-1.

参考:https://www.ibm.com/developerworks/cn/linux/shell/awk/awk-1/


http://lihuaxi.xjx100.cn/news/243015.html

相关文章

国信优易首席科学家周涛:大数据的商业应用

国信优易首席科学家周涛认为,大数据已经成为一个非常热的概念,但是当一个概念热到一定程度就会存在风险,甚至风险比机会还多。在大数据沙龙中,他和数据从业者们分享了自己所经历的大数据应用。 以下为周涛发言: 大数据…

Mac OS X 安装和配置Scala

2019独角兽企业重金招聘Python工程师标准>>> 一、下载Scala 到官网下载Mac版的Scala: http://www.scala-lang.org/download/二、配置Scala 解压压缩包,可将其移动至/usr/local/share下(Scala的版本和下载目录以实际安装的为准)&am…

UI设计培训需要学哪些内容

想要学习UI设计并没有想象中那么简单的,UI设计需要学习的内容有很多,那么具体UI设计培训需要学哪些内容呢?来看看下面小编的详细介绍就知道了。 UI设计培训需要学哪些内容? 在ui设计中,需要的基础是一些简单的美术基础和平面设计基础&#…

偏度和峰度

峰度,偏度http://www.chinadmd.com/file/pzuouiipisaowvcsoeeivv3u_2.html https://en.wikipedia.org/wiki/Kurtosis https://en.wikipedia.org/wiki/Skewness 分布形状 file:///C:/Users/DELL/Desktop/doane.pdf转载于:https://www.cnblogs.com/baiting/p/5576895.…

linux下字符串处理工具二:awk( 二),awk脚本

awk脚本 awk脚本是一个可执行的文件,常习惯以.awk命名。 结构: $test.awk #!/bin/awk -f #脚本系统中awk的位置BEGIN{} #脚本主体之前,执行些什么。该行内的语句,可以只执行一次{} #脚本主体,此中的语句&am…

1112. Stucked Keyboard (20)

1112. Stucked Keyboard (20) 注:如果存在这样的字符串,sss_sssaedsss_s,那么我们认为s是好键(次数为3),所以,在一开始,我们第一次访问的时候,不能马上确定哪些键是坏键&#xff0c…

Java入门培训班怎么选择

想要学习java技术,小编一直给小伙伴推荐的是报班学习,目前市面上的java培训机构有很多,对于java培训班的选择很多小伙伴都比较迷茫,下面小编就为大家详细的介绍一下Java入门培训班怎么选择的问题。 Java入门培训班怎么选择?一般正…

Hive 按某列的部分排序 以及 删列操作

Hive 按某列的部分排序 以及 删列操作 脑袋果然还是智商不足。 涉及到的小需求: 某个表test 有一列 tc: a字符串b字符串c字符串 拼接组成把test表,按b字符串排序 输出遇到的问题: select 里面必须包含 order by 的列按b字符串排序…