Linux OS awk命令使用

awk命令使用方式

awk '{[pattern] action}' {filenames}   # 行匹配语句 awk '' 只能用单引号

log.txt

2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo

用法一:简单输出

以空格为输入分隔符,输出第1和4列(注意,print后不加逗号就会使输出连在一起)

[yangyang@izuf6btm1dq2w64mt5q889z practice]$ awk '{print $1 $4}' log.txt
2a
3like
This's
10orange,apple,mongo

以空格为输入分隔符,以空格为分隔符输出第1和4列

[yangyang@izuf6btm1dq2w64mt5q889z practice]$ awk '{print $1,$4}' log.txt
2 a
3 like
This's
10 orange,apple,mongo

以空格为输入分隔符,以制表符为分隔符输出第1和4列 (\t前后加引号)

[yangyang@izuf6btm1dq2w64mt5q889z practice]$ awk '{print $1"\t"$4}' log.txt
2       a
3       like
This's
10      orange,apple,mongo
用法一:设置输入分隔符 -F

逗号作为输入分隔符,以制表符为分隔符输出第1,3列

[yangyang@izuf6btm1dq2w64mt5q889z practice]$ awk -F"," '{print $1"\t"$3}' log.txt
2 this is a test
3 Are you like awk
This's a test
10 There are orange     mongo

使用多个分隔符,先使用空格分割,然后对分割结果再使用","分割,以制表符为分隔符输出第1,5列

[yangyang@izuf6btm1dq2w64mt5q889z practice]$ awk -F"[ ,]" '{print $1"\t"$5}' log.txt
2       test
3       awk
This's
10      apple
用法三、设置变量 -v
[yangyang@izuf6btm1dq2w64mt5q889z practice]$ awk -va=1 '{print $1,$1+a}' log.txt
2 3
3 4
This's 1
10 11
[yangyang@izuf6btm1dq2w64mt5q889z practice]$ awk -va=1 -vb="kk" '{print $1,$1+a,$1b}' log.txt
2 3 2kk
3 4 3kk
This's 1 This'skk
10 11 10kk
用法四、符合条件输出

输出第一列大于2的行

[yangyang@izuf6btm1dq2w64mt5q889z practice]$ awk '$1>2' log.txt
3 Are you like awk
This's a test
10 There are orange,apple,mongo

输出第一列大于2并且第二列等于'Are'的行

[yangyang@izuf6btm1dq2w64mt5q889z practice]$ awk '$1>2 && $2=="Are"' log.txt
3 Are you like awk

输出第一列大于2并且第二列等于'Are'的行的第一列

[yangyang@izuf6btm1dq2w64mt5q889z practice]$ awk '$1>2 && $2=="Are" {print $1}' log.txt
3

运算符

运算符 描述
= += -= *= /= %= ^= **= 赋值
?: C条件表达式
|| 逻辑或
&& 逻辑与
~ ~! 匹配正则表达式和不匹配正则表达式
< <= > >= != == 关系运算符
空格 连接
+ - 加,减
* / % 乘,除与求余
+ - ! 一元加,减和逻辑非
^ *** 求幂
++ -- 增加或减少,作为前缀或后缀
$ 字段引用
in 数组成员
用法五、关键词

关于awk脚本,我们需要注意两个关键词BEGIN和END。
BEGIN{ 这里面放的是执行前的语句 }
END {这里面放的是处理完所有的行后要执行的语句 }
{这里面放的是处理每一行时要执行的语句}
忽略大小写

[yangyang@izuf6btm1dq2w64mt5q889z practice]$ awk 'BEGIN{IGNORECASE=1} /this/' log.txt
2 this is a test
This's a test
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容