awk的使用记录总结

本文介绍如何利用awk命令来查找并修改文件中特定行的指定字段,并提供了实际的例子来展示如何将这一技巧应用于实际场景,比如更新数据文件中的数值。

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

如何用awk实现匹配行指定字段替换后,重写源文件。

例如
源文件  data 内容如下
li          120        abc
wang  200        bcd
zhng   180       abc

我想重写后的 data 文件是        
li          120        abc
wang  500        bcd
zhng   180       abc

也就是找到wang的匹配行,给第二个字段数据加300

我的几个尝试没能成功,请达人指教下如何实践
1.如果用 awk '/wang/{$2=$2+300;print $0}'  data  则只打印匹配行
2.如果用 awk '/wang/{$2=$2+300};{print $0}'  data  则输出整个文件却没有匹配行被输出 

3. 如果用sub则似乎只能进行纯粹文字的替换,而不能实现变量或指定字段的替换。 如 awk '/wang/{sub(/120/,"500")};{print>"data" }' data. 我想要的是 $2=$2+300


  1. awk '$1~/wang/{$2=$2+300}1' file 1<>file

1的作用是使条件为真,默认就会执行{print},打印全部内容,重定向的作用是让你原文编辑保存


awk '/#BEGIN/,/#END/{next}1'

1是什么意思?

awk 'pattern{action}' file
一般awk的格式是这样的。

如果写成awk 'pattern' file,那么action默认为{print $0};
pattern如果是个定值,则判断该值是否为0(0为false,非0为true);
pattern如果是个计算表达式,则判断计算结果是否为0;
pattern如果是个awk 命令,则判断其返回值是否为0。

这样就能理解awk '1' file的意义了:
在这里action为空,因此默认为{print $0};1为定值,非0,因此执行action,即print $0。

删除passwd.conf文件中kernel开头的行中最后2行:

awk '$1=="kernel" {$(NF-1)="";$NF=""}1' passwd.conf

增加两行

awk '$1==“kernel" {$(NF+1)="test1";$(NF+2)="test2"}1' passwd.conf


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值