Linux awk命令和示例

时间:2019-11-20 08:53:02  来源:igfitidea点击:

如何在bash shell脚本中使用awk?

Awk是用于构建UNIX/Linux Shell脚本的出色工具。
AWK是一种编程语言,旨在处理文件或数据流中或使用Shell管道的基于文本的数据。

使用awk查看文本文件

awk '{ print }' /etc/passwd

或者 ($0表示整行内容)

awk '{ print 
awk -F':' '{ print  }' /etc/passwd
}' /etc/passwd

打印特定的字段(特定的列)

只查看第一列(字段),分隔符是冒号:

awk -F':' '{ print  }' /etc/passwd | sort

只查看第一列,并进行排序:

awk ' == 300 { print 
== != < > = ?:
}' /var/log/httpd/access.log

awk模式匹配

只查看符合条件的行:

awk ' == 300 ' /var/log/httpd/access.log
awk ' == 300 {print} ' /var/log/httpd/access.log
awk ' == 300 {print 
awk '/tom|bob|Hyman/' /etc/passwd
} ' /var/log/httpd/access.log

大括号外面的 $9 == 300称为匹配模式
大括号里面的 print $0称为执行动作。

比较运算符报错

awk "NR==1{print;exit}" /etc/resolv.conf
awk "NR==$line{print;exit}" /etc/resolv.conf

如果没有提供模式,则执行动作将应用于所有行。
如果没有指定 执行动作,则将打印整行。
如果只有print,则会打印整行。

因此,下面的命令效果是一样的:

awk '{total += } END {print total}' earnings.txt

awk匹配多个条件

匹配包含tom,或者bob或者Hyman的行

awk 'BEGIN {printf "%.3f\n", 2005.50 / 3}'

awk查看文件的第一行

Linux shell如何查看文件第1行内容:

n1=5
n2=10
echo | awk -v x=$n1 -v y=$n2 -f program.awk

使用awk进行计算

将第1列中所有数字进行求和:

BEGIN{ans=x+y}
{print ans}
END{}

Shell无法使用浮点数进行计算,但是awk可以:

##代码##

Shell脚本中如何将Shell变量传递到Awk

可以使用-v选项将shell变量传递给awk:

##代码##

在程序开始执行之前,将值n1分配给变量x。
此类变量值可以在AWK程序的BEGIN块中使用:

##代码##