菜鸟笔记
提升您的技术认知

awk 内置变量-ag真人游戏

阅读 : 560

awk 内置变量

awk内置变量 作用
$0 代表目前awk所读入的整行数据。我们已知awk是一行一行读入数据的,$0就代表当前读入行的整行数据。
$n 代表目前读入行的第n个字段。比如,$1表示第1个字段(列),$2表示第2个字段(列),如此类推
nf 当前行拥有的字段(列)总数。
nr 当前awk所处理的行,是总数据的第几行。
fs 用户定义分隔符。awk的默认分隔符是任何空格,如果想要使用其他分隔符(如“:”),就需要fs变量定义。
argc 命令行参数个数。
argv 命令行参数数组。
fnr 当前文件中的当前记录数(对输入文件起始为1)。
ofmt 数值的输出格式(默认为%.6g)。
ofs 输出字段的分隔符(默认为空格)。
ors 输出记录分隔符(默认为换行符)。
rs 输入记录分隔符(默认为换行符)。

awk常用统计实例

打印文件的第一列(域) :

 awk '{print $1}' filename
 ```
打印文件的前两列(域) :
```shell
 awk '{print $1,$2}' filename
 ```
打印完第一列,然后打印第二列 :
```shell
awk '{print $1 $2}' filename

打印文本文件的总行数 :

awk 'end{print nr}' filename

打印文本第一行 :

awk 'nr==1{print}' filename

打印文本第二行第一列 :

sed -n "2, 1p" filename | awk 'print $1'

获取第一列

ps -aux | grep watchdog | awk '{print $1}'

获取第一列,第二列,第三列

ps -aux | grep watchdog | awk '{print $1, $2, $3}'

获取第一行的第一列,第二列,第三列

ps -aux | grep watchdog | awk 'nr==1{print $1, $2, $3}'

获取行数nr

df -h | awk 'end{print nr}'

获取列数nf(这里是获取最后一行的列数,注意每行的列数可能是不同的)

ps -aux | grep watchdog | awk 'end{print nf}'

获取最后一列

ps -aux | grep watchdog | awk '{print $nf}'

对文件进行操作

awk '{print $1}' filename

指定分隔符(这里以:分割)

ps -aux | grep watchdog |awk  -f':' '{print $1}'

超出范围不报错

ps -aux | grep watchdog | awk '{print $100}'

查询可以登录的用户的用户名和uid

cat /etc/passwd | grep "/bin/bash" | awk '{fs=":"} {printf $1 "\t" $3 "\n"}’

这里“:”分隔符生效了,可是第一行却没有起作用,原来我们忘记了“begin”条件,那么再来试试;

cat /etc/passwd | grep "/bin/bash" | awk 'begin {fs=":"} {printf $1 "\t" $3 "\n"}’
cat /etc/passwd | grep "/bin/bash" | awk 'begin {fs=":"} {printf $1 "\t" $3 "\t 行号:” nr "\t 字段数:" nf "\n"}’
#解释下awk命令
#开始执行{分隔符是“:”}{输出第一字段和第三字段输出行号(nr值)字段数(nf值)}
root     0      行号:1       字段数:7
user1   501     行号:2       字段数:7

如果我只想看看sshd这个伪用户的相关信息,则可以这样使用:

可以看到sshd 伪用户的uid是74,是/etc/passwd_文件的第28行,此行有7个字段

cat /etc/passwd | awk 'begin {fs=":"} $1=="sshd" {printf $1 "\t" $3 "\t 行号:" nr "\t 字段数:" nf "\n"}’
网站地图