常用命令-awk

awk是Linux处理文本的利器,在linux日常处理中,发挥很重要的作用,学会使用awk可以让你的处理文本工作事半功倍。此处记录下,awk常用的处理文本方法。

基本用法
#action中要输出字符串需用双引号`"`括起来。
1. `awk '{[pattern] action}' {filename}`
2. `awk -F fs '{action}' {filename}`
常用参数
参数 描述
-F fs / --field-separator fs 指定分隔符fs,可以是字符串或正则表达式。默认按TAB和空格进行分割
-v var=value / --asign var=value 用户自定义变量
内建常用变量
变量 描述
$n 当前记录的第n个字段,由fs分隔
$0 当前完整记录,还未分隔字符串
NF 当前记录的字段数量
NR 即行号,从1开始算
运算符
运算符 描述
=/ +=/ -=/ *=/ /=/ %=/ ^=/ **= 赋值运算符
?: C条件表达式
|| 逻辑或
&& 逻辑与
< / <=/ >/ >=/ !=/ == 关系运算符
空格 连接
+/- 加减
*/\/\% 乘/除/求余
+/-/! 一元加/一元减/逻辑非
++/-- 自增/自减
in 数组成员
~/~! 匹配正则表达式/不匹配正则表达式
BEGIN/END块

BEGIN{开始处理前执行的语句}
{每行执行的语句}
END{处理完所有行之后执行的语句}

使用示例
~$ cat test.txt
1 my name is kl
2 I'm a software developer
3 I'm so hungry
4 I don't have money,house,girlfiend

# 使用默认分隔符分隔
~$ awk '{print $1,$4}' test.txt
1 is
2 software
3 hungry
4 have

# 使用指定分隔符分隔
~$ awk -F, '{print $1,$2}' test.txt
1 my name is kl
2 I'm a software developer
3 I'm so hungry
4 I don't have money house

# 使用比较运算符
~$ awk '{if($1>2) print $0}' test.txt
3 I'm so hungry
4 I don't have money,house,girlfiend

# 同上
~$ awk '$1>2 {print $0}' test.txt
3 I'm so hungry
4 I don't have money,house,girlfiend

# 使用逻辑与
~$ awk '$1>2 && $2=="I" {print $0}' test.txt
4 I don't have money,house,girlfiend

# 使用正则,打印第二列包含I的行
~$ awk '$2 ~ /I/ {print $0}' test.txt
2 I'm a software developer
3 I'm so hungry
4 I don't have money,house,girlfiend

# 同上
awk '{if($2 ~ /I/)print $0}' test.txt
2 I'm a software developer
3 I'm so hungry
4 I don't have money,house,girlfiend

# 使用变量
~$ awk '{print NR, $0}' test.txt
1 1 my name is kl
2 2 I'm a software developer
3 3 I'm so hungry
4 4 I don't have money,house,girlfiend

# 使用BEGIN/END,对第一列求和
~$ awk 'BEGIN{sum=0} {sum+=$1} END{print "sum is " sum }' test.txt
sum is 10

# 改变第1列的值
~$ awk '{$1++ ;print $0}' test.txt
2 my name is kl
3 I'm a software developer
4 I'm so hungry
5 I don't have money,house,girlfiend

你可能感兴趣的:(常用命令-awk)