awk入门
wenking 5/13/2024 命令
awk是处理文本文件的一个应用程序;依次处理文件的每一行,并读取里面的每一个字段。
# 1. 基本语法
awk '动作' 文件名
awk '{print $1}' 1.txt
1
2
3
2
3
1.txt是 awk 所要处理的文本文件, 前面单引号内部有一个大括号,里面就是每一行的处理动作 print $0。其中,print是打印命令,$0代表当前行;
awk会根据空格和制表符,将每一行分成若干字段,依次用$1、$2、$3代表第一个字段、第二个字段、第三个字段等等。
echo 'this is a test' | awk '{print $3}'
a
1
2
3
2
3
当然,如果文件分隔符不是空格和制表符,比如:冒号:,那么,可以用-F指定分隔符。
echo 'this:is:a:test' | awk -F ':' '{print $3}'
a
1
2
3
2
3
# 变量
awk中提供了一些内置变量,方便对文本内容进行操作。
- 可以使用
$ + 数字
表示第几个字段, $1表示第一个字段, $2 表示第二个字段,以此类推。 NF
表示当前行有多少个字段,$NF
表示最后一个字段,$(NF-1)
表示倒数第二个字段;NR
表示当前处理的是第几行;- 其他常用变量:
FS
表示输入字段分隔符,默认为空格和制表符;RS
表示输入记录分隔符,默认为换行符;OFS
表示输出字段分隔符,默认为空格;ORS
表示输出记录分隔符,默认为换行符。FILENAME
表示当前输入的文件名。
# 函数
awk中内置了一些原始函数,方便对文本内容进行转换。
length()
表示字符串长度;sub(r,s,t)
表示用字符串s替换字符串t中匹配r的部分;tolower(s)
表示将字符串s中的所有大写字母转换为小写字母;toupper(s)
表示将字符串s中的所有小写字母转换为大写字母;sprintf(format,expr,expr,...)
表示按照format的格式化方式,将expr转换为字符串,并返回结果。split(s,array,sep)
表示将字符串s按照sep分割,并将结果保存到数组array中。systime()
表示返回当前时间的时间戳。rand()
表示返回一个随机数。sqrt()
表示返回一个数的平方根。
# 条件语句
awk 允许输出符合条件的行;
awk '条件 动作' 文件名
awk '$1=="a" {print $0}' 1.txt
awk -F ':' '/usr/ {print $1}' 1.txt
1
2
3
4
2
3
4
条件语句需要写在 {}
外
if 语句
awk -F ':' '{if ($1 > "m") print $1}' demo.txt
1
if语句需要写在 {}
内
打印倒数第三个字段;
awk 'NF > 3 {print NR ")", $(NF-3) }' 1.txt
awk '{if(NF > 3) print NR ") " $(NF-3); else print NR ") " "xxx"}' 1.txt
1
2
3
2
3