awk的使用和举例

awk是一个强大的文本分析工具,通常使用空格或制表符作为字段分隔符。通过-F选项可自定义分隔符,例如用法示例中展示了如何通过指定单个或多个分隔符来处理文本。此外,FS定义输入字段分隔符,NF表示字段数量,NR表示当前行数,OFS用于设置输出字段间的分隔符。awk还支持正则表达式,可用于复杂的文本处理任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通常情况下,awk 将每个输入行解释为一条记录,将上一行的每个单词解释为每一个字段。
默认情况下,awk使用空格或者制表符作为字段分隔符将输入分隔成字段。
分割后,$0 代表整个记录,$1表示第一个字段,$2表示第二个字段,以此类推…


-F:指定分割符,可以指定一个或多个作为分割符

用法示例一:指定单个分割符
pwd | awk -F"/" '{print $NF}':输出当前所在的文件夹的名称
-F"/"表示把分割符设置成/$NF表示输出分隔后的最后一个字段

[danni@vm-xxx develop]$ pwd
/home/danni/work/develop
[danni@vm-xxx develop]$ pwd | awk -F"/" '{print $NF}'
develop


用法示例二:指定多个分割符
已知test.txt的文本内容为:

[danni@vm-xxx log]$ cat test.txt
I am a beautyful girl, I am in class 8

分隔符采用空格和逗号中的一个或多个进行分割:-F'[ ,]+'
此处采用了正则表达式的写法,[] 表示可以匹配 [] 里面的任意一个,+ 表示匹配前面的正则表达式1次或者多次。

[danni@vm-xxx log]$ awk -F'[ ,]+' '{print $5 " " $10}' test.txt 
girl 8



FS:字段分隔符(Field Separator)
定义输出的字段的分隔符。
FS="\t+" :表示使用一个或多个tab进行分割的分隔符,+ 表示一个或多个前一字符

[danni@vm-xxx develop]$ echo -e "aaa\t\tbbb\n   ccc\tddd" | awk -v FS="\t+" '{print $2}'
bbb
ddd



NF
NF:表示将要显示的一行记录中有多少个字段
$NF:表示显示一行记录中的最后一个字段
示例:使用 -F 指定分隔符为逗号,输出NF表示使用逗号分隔后的字段的数目,$NF表示最后个字段的值

[danni@vm-xxx log]$ echo "a,b,c,d,e" | awk -F',' '{print NF" "$NF}'  
5 e



NR:当前行数
示例:输出行号大于2的行数被分隔后的第一个字段

[danni@vm-xxx log]$ echo -e "one \n two \n three three1" | awk '{if(NR > 2){print $1}}'  
three



OFS:输出字段分隔符(Out of Field Separator)
BEGIN是在文件开始扫描前进行的操作,此处在BEGIN时设置了输出分隔符是 |

[danni@vm-xxx run]$ echo -e "111 222 \n 333 444" | awk 'BEGIN {OFS="|"} {print $1,$2}'  
111|222
333|444



awk正则表达式(Out of Field Separator)

符号表示的含义
*与前面的正则表达式的零个或多个出现匹配
.匹配任何单个字符
\转义随后的特殊字符
^作为正则表达式的第一个字符,表示匹配行的开始
$作为正则表达式的最后一个字符,表示匹配行的结尾
+匹配前面的正则表达式的一次或多次出现
匹配前面的正则表达式的零次或一次出现
()对正则表达式分组
[...]匹配方括号中的字符类中的任意一个,如果方括号中的第一个字符为^表示否定匹配
{n,m}匹配它前面某个范围内单个字符出现的次数,{n}将匹配n次出现,{n,}至少匹配n次出现,{n,m}匹配n和m之间的任意次出现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值