基础语法
awk 'pattern { action }' file.txt
以下是一些常见的内置变量:
- $0:表示当前行的整个内容(包括所有字段)。
- $1, $2, $3, …:表示当前行的第一个、第二个、第三个字段,依此类推。字段之间默认使用空格作为分隔符,可以使用-F选项指定不同的字段分隔符。
- NR:当前行号
- NF:当前行的字段数
- FS:字段分隔符,默认为“空格”
- RS:记录分隔符,默认为“换行符”
以下是一些常见的内置函数:
- print:打印输出
- length:返回字符串长度
- substr:返回子字符串
- match:查找正则表达式匹配项
示例应用
- 提取日志文件中特定时间段内的日志信息
awk '/2022-01-01 10:00:00/,/2022-01-01 12:00:00/' logfile.txt
- 查找包含某个关键字的行并打印关键字所在行和前后几行:
awk '/keyword/{ for (i=-2;i<=2;i++) print NR+i,$0}' file.txt
查找file.txt文件中包含“keyword”的所有行,并打印关键字所在行和前后两行。
- 统计CSV文件中某一列的唯一值数量:
awk -F',''{ count[$1]++} END { for (word in count) print word, count[word]}' file.csv
统计file.csv文件中第一列的唯一值数量
- 提取登录成功的用户名并统计登录次数
awk '/Login successful/{ count[$4]++} END { for (user in count) print user, count[user]}' login.log
- 打印输入文件中每一行的行号和长度
awk '{ print NR, length }' file.txt