如何使用Awk命令替换文件指定位置的手机号子串为固定值
报错原因
你的写法核心错误在于对awk语法的$符号理解有误:$var在awk中代表「编号为var值的字段」。你用substr提取到的是10位手机号纯数字字符串,赋值给var后调用$var,会被awk识别为要读取第N(10位数字)个字段,awk需要为上千万不存在的字段预分配内存,直接触发内存不足报错。
正确实现方案
直接拆分整行拼接替换即可,不需要修改字段或者做正则匹配:
awk '{ print substr($0,1,313) "1234567890" substr($0,324) }' final_phone.txt > final_phone.txt1
逻辑说明:
- 用
substr($0,1,313)提取当前行第1到313位的原始内容 - 拼接固定替换值
1234567890,直接覆盖原本的314-323位 - 最后拼接
substr($0,324)提取324位及之后的剩余内容,整行输出
如果需要兼容行长度不足323的场景,可以添加长度判断,短行直接原样输出:
awk 'length($0)>=323 { print substr($0,1,313) "1234567890" substr($0,324); next }1' final_phone.txt > final_phone.txt1
内容的提问来源于stack exchange,提问作者Nikhil
相关产品推荐
相关产品推荐

