awk常用编辑摘要

简介: 【10月更文挑战第1天】`awk` 是一种用于文本处理的编程语言,可逐行读取并处理文件内容。很多时候快速使用时,尤其处理一些复杂的语句,需要awk的多功能配合,记录一些常用的语句,以备不时之需。

awk 命令总结

awk是处理文本的一种编程语言,它可以依次处理文件的每一行,并读取里面的每一个字段。

语法格式
awk [选项] '匹配规则和处理规则 ' [处理文本路径]

#选项
 1. -F fs fs指定输入分隔符,fs可以是字符串或正则表达式,如-F: 
 2. -v var=value 赋值一个用户定义变量,将外部变量传递给awk 
 3. -f scripfile 从脚本文件中读取awk命令 
 4. -m[fr] val 对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用

#匹配规则:
 1. 字符串
 2. 正则表达式

#处理规则
 1. BEGIN{} : BEGIN是在awk处理文本之前运行
 2. // : 使用的匹配规则
 3. {} :循环(每次只处理一行数据)
 4. END{} :当所有的处理全部执行完毕之后,执行END中的相关操作
变量
$0: 当前行的内容
NR: 行号,每处理完一条记录,NR值加1
NF: 保存记录的字段数(总共保存的列数),$1,$2...$100
FS: 输入字段分隔符,默认空格
OFS:输出字段分隔符

#输出大于5行的所有内容
awk 'NR >5 {print $0}' text.txt
匹配关系表达式
~    包含
!~   不包含
>    大于
<    小于
>=   大于等于
<=   小于等于
==    等于
!=   不等于

#显示第二个字段中包含“ia”字符的每条记录
[root@localhost ~]# awk '$2 ~ /ia/ {print $0}' teams.txt
匹配范围
//,// 范围模式由逗号分隔的两组字符组成,从与第一个字符串匹配的记录到第二个字符串的记录

#显示从“Raptors”到 “Celtics”在内的记录
awk '/Raptors/,/Celtics/ {print $0}' teams.txt

#显示第四个字段等于31到第四个字段等于34的记录
awk '$4 == 31 , $4 == 34 {print $0}' teams.txt
条件与循环
##条件##
if (condition)
    action

# 判断数字是奇数还是偶数
awk 'BEGIN {num = 10; if (num % 2 == 0) printf "%d 是偶数\n", num }'

##循环##
for (initialisation; condition; increment/decrement)
    action

# 输出1 - 5 的数字,在执行qwk之前
awk 'BEGIN { for (i = 1; i <= 5; ++i) print i }'

while (condition)
    action

# 循环输出数字 1 到 5 
awk 'BEGIN {i = 1; while (i < 6) { print i; ++i } }'
示例
  1. 使用(或者)分割,并输出第二和第四列

    [root@test1 ~]# echo "/dev/sdh1 (data)clean(running)" | awk -F '[(|)]' '{ print $2,$4}'
    data running
    
  2. 获取url中的的token

    echo '{"data":{"password_status":"ok","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwibmlja25hbWUiOiJhZG1pbiIsInJvbGUiOjEsInVzZXJfaWQiOjEsInRpbWVzdGFtcCI6MTY4OTIzNjQ5OS4xNDgzMjN9.BAJohHgDoY_q2PQGGXeiQ7AV6y1qvdBqdkUpSri9I4o","user":{"avatar":"","create_time":"2023-07-13 03:59:18","email":"admin@fiberhome.com","id":1,"last_login_time":"2023-07-13 14:09:50","nickname":"admin","password_expire_time":"2023-10-11 03:59:18","phone":"","role":1,"status":0,"update_time":"2023-07-13 14:59:15","username":"admin"}},"message":{"detail_message":{"info":"OK"},"ret_code":0}}'| awk -F"[\"]" '{for(i=1;i<=NF;i++){if($i~/token/){print $(i+2)}}}'
    
相关文章
|
7月前
|
Perl
在Awk中,直接通过文件作为输入
在Awk中,直接通过文件作为输入
77 2
|
索引 Perl
AWK进行简单分析文本
AWK进行简单分析文本
85 0
|
Perl
使用 awk 命令统计文本
下面只是在工作中可能会遇到的一个场景,所以记录下来,如果小伙伴有更合适的方式来统计计算,欢迎留言。
248 0