AWK之随心所欲-高手篇

Posted linux-error

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AWK之随心所欲-高手篇相关的知识,希望对你有一定的参考价值。

1.内置变量

变量名 描述
FS 输入字段分隔符,默认是空格或制表符
OFS 输出字段分隔符,默认是空格
RS 输入记录分隔符,默认是换行符\n
ORS 输出记录分隔符,默认是换行符\n
NF 统计当前记录中字段个数
NR 统计记录编号,每处理一行记录,编号就会+1
FNR 统计记录编号,每处理一行记录,编号也会+1,与 NR 不同的是,处理第二个 文件时,编号会重新计数。
ARGC 命令行参数数量
ARGV 命令行参数数组序列数组,下标从 0 开始,ARGV[0]是 awk
ARGIND 当前正在处理的文件索引值。第一个文件是 1,第二个文件是 2,以此类推
ENVIRON 当前系统的环境变量
FILENAME 输出当前处理的文件名
IGNORECASE 忽略大小写
SUBSEP 数组中下标的分隔符,默认为"\034"

1.1. FS和OFS

程序开始前复制给FS,与-F一样用

[root@192 ~]# head -n5 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@192 ~]#
[root@192 ~]# head -n5 /etc/passwd|awk 'BEGINFS=":"print $1,$2'
root x
bin x
daemon x
adm x
lp x
OFS由于默认是空格,输出如果是:,那么逗号会变为*
[root@192 ~]# head -n5 /etc/passwd|awk 'BEGINFS=":";OFS="*"print $1,$2'
root*x
bin*x
daemon*x
adm*x
lp*x

1.2. RS和ORS

RS默认\n,指定分割符 ,ORS默认换行符,也可以指定输出符号
也就是说 将分割符换成你想要的样子

[root@192 ~]# tail -n2  /etc/services |awk 'BEGINRS="/";ORS="+"print $0'
iqobject        48619+udp               # iqobject
matahari        49000+tcp               # Matahari Broker

1.3. NF

字段统计
[root@192 ~]# tail -n2 /etc/services |awk 'BEGINFS="/"print $NF'
tcp               # 3GPP Cell Broadcast Service Protocol
tcp               # Image Systems Network Services

[root@192 ~]# tail -n 2 /etc/services |awk 'BEGINFS="/"print NF'
2
2

以上是关于AWK之随心所欲-高手篇的主要内容,如果未能解决你的问题,请参考以下文章

turtlesim之欢度国庆(ROS2二维轨迹之随心所欲)

Python随心记--函数之面向对象

大家畅所欲言,当jFinal遇到XSS和SQL注入怎么处理

Linux Shell三剑客之Grep

一篇无聊的随笔

Python随心记--python之错误:OSError: [WinError 10048]