正则表达式--------awk

一、awk的基本使用

awk比sed强的地方在于不仅能以行为单位还能以列为单位处理文件。awk缺省的行分隔符是换行,缺省的列分隔符是连续的空格和Tab。

awk命令行的基本形式为:
awk option 'script' file1 file2 ...
awk option -f scriptfile file1 file2 ..


和sed一样,awk处理的文件既可以由标准输入重定向得到,也可以当命令行参数传入,编辑命令可以直接当命令行参数传入,也可以用-f参数指定一个脚本文件,编辑命令的格式为:

/pattern/{actions}

condition{actions}

二、awk命令

☆☆☆☆☆打印

<span style="font-size:18px;">[root@localhost AWK]# awk '{print $0}' file //
producta 10
productb 90
productc 70
productd 67
producte 89
[root@localhost AWK]# awk '{print $NF}' file //显示最后一列
10
90
70
67
89
[root@localhost AWK]# awk '{print $2}' file  //显示第二列
10
90
70
67
89
[root@localhost AWK]# awk '{print $1}' file  //显示第一列
producta
productb
productc
productd
producte
[root@localhost AWK]# cat file   //显示文件内容
producta 10
productb 90
productc 70
productd 67
producte 89
</span>
(2)加上约束条件:>70合格,反之不合格

<span style="font-size:18px;">[root@localhost AWK]# awk '$2>70{print $0 ,"Y";} $2<=70{print $0,"N"}' file  //condition{action}
producta 10 N
productb 90 Y
productc 70 N
productd 67 N
producte 89 Y</span>

统计一个文件中的空行数

[root@localhost AWK]# grep -E '^$' file |wc -l
1
[root@localhost AWK]# sed  -n '/^$/p' file |wc -l
1
[root@localhost AWK]# awk 'BEGIN{count=0;}/^$/{count++}END{print count}' file
1


三、awk调用方式

(1)命令行方式

(2)shell脚本方式

[root@localhost AWK]# chmod 755 test.awk
[root@localhost AWK]# ./test.awk file
2
2
3
[root@localhost AWK]# cat file
producta 10
productb 90
productc 70
productd 67

productl 45
producte 89
[root@localhost AWK]# cat test.awk
#!/usr/bin/awk -f
BEGIN{
	goods=0;
	pass=0;
	bads=0;
}
{
	if($2>=80){
	goods++;
    }
	else if($2>=60){
		pass++;
	}
	else{
		bads++;
	}
}
END{
	printf("%d\n",goods);
    printf("%d\n",pass);
	printf("%d\n",bads);
}
(3)将所有的awk命令插入一个单独文件,然后调用:
awk -f awk-script-file input-file(s)
其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的是一样的。

[root@localhost AWK]# awk -f test.awk file
2
2
3


四、awk内置命令和杂项


ARGC          命令行参数个数
ENVIRON    支持队列中系统环境变量的使用
FILENAME   awk浏览的文件名
FNR             浏览文件的记录数
FS                设置输入域分隔符,等价于命令行 -F选项
NF                浏览记录的域的个数
NR                已读的记录数
OFS              输出域分隔符
ORS              输出记录分隔符
RS                 控制记录分隔符
此外,$0变量是指整条记录。$1表示当前行的第一个域,$2表示当前行的第二个域,......以
此类推。可以通过指定域分隔符,来格式化输入输出


练习:统计某个文件夹下的文件占用的字节

[root@localhost AWK]# ls -lR /home/admin/BinaryTree | awk 'BEGIN{size=0}/.+\.c$/{size+=$5}END{print size}'
1341




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[2\]:在awk中,可以使用正则表达式来匹配和处理文本。正则表达式可以用于模式匹配、替换和提取文本等操作。可以在awk命令中直接使用正则表达式,也可以将正则表达式写入一个文件中,然后通过-f选项加载该文件。使用正则表达式时,可以使用一些特殊字符和元字符来表示不同的模式。例如,使用"."表示匹配任意字符,使用"*"表示匹配前一个字符的零个或多个实例,使用"\[\]"表示匹配括号内的任意一个字符等等。通过结合正则表达式awk的其他功能,可以实现更加灵活和强大的文本处理操作。 问题:awk正则表达式能和-f选项一起使用吗? 回答: 是的,awk正则表达式可以和-f选项一起使用。通过-f选项加载一个包含正则表达式的文件,可以在awk命令中使用该文件中定义的正则表达式进行模式匹配、替换和提取文本等操作。这样可以使awk命令更加灵活和可维护。例如,可以将一组复杂的正则表达式写入一个文件,然后通过-f选项加载该文件,使得awk命令更加清晰和易于理解。 #### 引用[.reference_title] - *1* [正则表达式awk工具用法](https://blog.csdn.net/weixin_45409403/article/details/102545317)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [9.正则表达式--awk](https://blog.csdn.net/honey_wx/article/details/120297795)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值