awk命令

mac2022-06-30  28

1 awk命令

1.1 awk作用

擅长取列,擅长统计分析 实际上是gawk的软链接。模式扫描(条件分配),程序语言

1.2 语法

awk [参数] '模式(条件) {动作}(指令)' 文件信息

1.3 功能

查询,排除,替换以下命令所需环境: cat > oldboy.txt <<EOFZhang Dandan 41117397 :250: 100 :175Zhang Xiaoyu 390320151 :155:90:201Meng Feixue 80042789 :250:60:50Wu Waiwai 70271111 :250:80:75Liu Bingbing 41117483 :250: 100 :175Wang Xiaoai 3515064655 :50:95:135Zi Gege 1986787350 :250:168:200Li Youjiu 918391635 :175:75:300Lao Nanhai 918391635 :250: 100 :175EOF1、显示Xiaoyu的姓氏和ID号码(1)awk '/Xiaoyu/{print $1,$3}' oldboy.txt(2)awk '/Xiaoyu/{print $1" "$3}' oldboy.txt要用逗号,或者双引号分隔按照指定列进行搜索信息(1)awk '$2~/Xiaoyu/' oldboy.txt 将有Xiaoyu的信息显示出来(2)awk '$2!~/Xiaoyu/' oldboy.txt !:表示取反 排除Xiaoyu的信息,将其他信息取出来~:代表在awk中列的匹配方式2、姓氏是zhang的人,显示他的第二次捐款金额及他的名字第一步:先找出姓氏是张的人awk '$1~/Zhang/' oldboy.txt第二步:显示出名字和所有捐款记录awk '$1~/Zhang/{print$2,$4}' oldboy.txt第三步:指定字符信息作为空格符awk -F "[: ]+" '$1~/Zhang/{print$2,$5}' oldboy.txt补充:awk默认使用空格进行作为列分隔符 默认区分大小写-F 指定分隔符的符号信息利用 -F "[: ]+" -F 指定括号里的冒号,空格作为分隔符 +:将多个连续的分隔符汇总为一个整体3、显示所有以41开头的ID号码人的全名和ID号码第一步:找出ID号码是41开头的人awk '$3~/^41/' oldboy.txt第二步:显示出人的全名和ID号码awk '$3~/^41/{print$1,$2,$3}' oldboy.txt|column -tcolumt -t :对文件内容信息进行排序4、显示所有ID号码最后一位数字是1或5的人的全名第一步:找出ID号码最后一位数字是1或5的信息awk '$3~/[15]$/'oldboy.txtawk '$3~/1$|5$/' oldboy.txt[ ]、| :在这里都是或者的关系第二步:显示出全名信息awk '$3~/[15]$/{print$1,$2}' oldboy.txt|column -t5、显示文件中第二行,第三行的信息第一步:显示第二行awk 'NR==2' oldboy.txt第二步:显示第三列awk 'NR==2{print $3}' oldboy.txtNR:表示行号信息,取出第几行信息NR==2:取出第二行信息6、显示Xiaoyu的捐款,每个捐款数值都有以$开头,方法一:awk -F "[:]" 'NR==2{print "$"$2"$"$3"$"$4}' oldboy.txt方法二:awk '$2~/Xiaoyu/{print $4}' oldboy.txt|sed 's#:#$#g'方法三:awk '$2~/Xiaoyu/{print $4}' oldboy.txt|tr ":" "$"方法四:awk替换功能gsub(/要替换的信息/,"替换成什么",将第几列进行替换)awk '$2~/Xiaoyu/{gsub(/:/,"$",$NF);print $NF}' oldboy.txt

1.4 awk命令高级功能说明

普通模式:1、正则表达式作为模式 ^:还可以表示某一列的开始 $:还可以表示某一列的开始2、比较表达式作为模式awk 'NR==1{print $NF}' oldboy.txt3、范围模式:awk 'NR==1;NR==2' oldboy.txt 只查看第一和第二行awk 'NR==1,NR==3' oldboy.txt 查看第一到第三行特殊模式:BEGIN :在处理文件之前先执行的动作(1)生成文件内容表头信息awk 'BEGIN{print "姓氏","名称","id号码","捐款记录"}{print $0}' oldboy.txt |column -t(2)用于在系统中进行运算数值awk 'BEGIN{print 2+3}'(3)修改或设置变量信息a:awk命令中,会直接将字符串信息当成变量$1: 表示取第一列$NF:表示取最后一列信息 $: 表示取一行中所有的列①awk 'BEGIN{oldboy=62;print oldboy}'将oldboy当成变量②awk 'BEGIN{oldboy=62;print "oldboy"}'加上" "取消oldboy的变量b:awk命令中,变量分类:自定义变量:oldboy=62内置变量:NF : 显示最后一列信息 $(NF-1) 取倒数第2列NR : 表示行号信息0,取出第几行 NR==2 NR>=2 NR<=2FS : 指定分隔符信息 -F①awk -F ":" 'NR==1{print $2}' oldboy.txt以 :作为分隔符,取第一行第二列②awk 'BEGIN{FS=":"}NR==1{print $2}' oldboy.txt③awk -vFS=":" 'NR==1{print $2}' oldboy.txt

END:在处理文件之后再执行的动作awk 'END{print "总结:这是一个学生登记表"}{print $0}' oldboy.txt|column

1.5 awk统计运算

1、计算空格出现的次数:awk '/^$/{i=i+1}END{print i}' /etc/services2、统计/etc/passwd文件中最后一列有/sbin/nologin的出现了多少次①awk -F ":" '$NF~/nologin$/{i++}END{print i}' /etc/passwd②awk '/nologin$/{i++}END{print i}' /etc/passwdi=i+1 = i++ 累加运算:计算文件中一个字符串出现的次数3、求和运算seq 10|awk '{i=i+$1}END{print i}'补充NF : 显示最后一列信息 $(NF-1) 取倒数第2列NR : 表示行号信息0,取出第几行 NR==2 NR>=2 NR<=2FS : 指定分隔符信息 -F$1: 表示取第一列$NF:表示取最后一列信息 $: 表示取一行中所有的列-F : 指定分隔符号信息 ":" "[:/]" "[:/]+"-v : 设置变量信息

1.6 利用awk取出ip地址

第一步:定位有ip地址的行ip a s eth0|awk 'NR==3'第二步:只显示ip地址ip a s eth0|awk -F "[ /]+" 'NR==3{print $3}' 用-F指定参数的时候,开头的^和空格都属于列ip a s eth0|awk -F "[^0-9.]+" 'NR==3{print $2}'在不指定-F参数信息时,1. 默认将多个连续的空格汇总为整体2. 默认将一行头部开始空格信息忽略不计用-F指定参数的时候,开头的^和空格都属于列

转载于:https://www.cnblogs.com/basa/p/11136365.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)