awk 变量

awk变量
awk中的变量分为:内置和自定义变量
常见的内置变量
FS:输入字段分隔符,默认为空白字符,功能相当于 -F

OFS:输出字段分隔符,默认为空白字符
范例
[root@test ~]# awk -v FS=':' '{print $1,$3,$7}' /etc/passwd |head -n1
root 0 /bin/bash
[root@test ~]# awk -v FS=':' -v OFS=':' '{print $1,$3,$7}' /etc/passwd |head -n1
root:0:/bin/bash

RS:输入记录record分隔符,指定输入时的换行符
范例
[root@test ~]# cat test
a,b,c;12,
34,56,78;AA,
BB
[root@test ~]# awk -v FS="," -v RS=";" '{print $1,$3}' test
a c
12 56
AA

ORS:输出记录分隔符,输出时用指定符号代替换行符进行输出 一般不使用

NF:字段数量 即通过分割符对每行进行分割匹配后产生的字段的数量
范例
#引用变量时,变量前不需加$
[root@centos8 ~]#awk -F:'{print NF}' /etc/fstab
[root@centos8 ~]#awk -F:'{print $(NF-1)}' /etc/passwd
[root@centos8 ~]#ls /misc/cd/BaseOS/Packages/*.rpm |awk -F"." '{print $(NF-1)}'|sort |uniq -c
389 i686
208 noarch
1060 x86_64

NR:记录的编号 显示awk匹配后的行号

NR==2 即为第二行

范例
[root@centos8 ~]#ifconfig eth0 | awk 'NR==2{print $2}'
10.0.0.8

NR!=1 即为排除第一行 显示

 

FNR:各文件分别计数,记录的编号
范例
[root@centos8 ~]#awk '{print NR,$0}' /etc/issue /etc/redhat-release
1 \S
2 Kernel \r on an \m
3 4
CentOS Linux release 8.0.1905 (Core)

FILENAME:当前文件名
范例
[root@centos8 ~]#awk '{print FNR,FILENAME,$0}' /etc/issue /etc/redhat-release
1 /etc/issue \S
2 /etc/issue Kernel \r on an \m
3 /etc/issue
1 /etc/redhat-release CentOS Linux release 8.0.1905 (Core)

自定义变量(区分字符大小写)
-v var=value
在program中直接定义
范例
awk -v test='hello gawk' '{print test}' /etc/fstab
awk -v test='hello gawk' 'BEGIN{print test}'
awk 'BEGIN{test="hello,gawk";print test}'
awk -F: '{sex="male";print $1,sex,age;age=18}' /etc/passwd
cat awkscript
{print script,$1,$2}
awk -F: -f awkscript script="awk" /etc/passwd

posted @   运维笔记123  阅读(550)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示