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