awk的批量replace功能

awk的批量replace功能

需求

现在需要替换一个文本

文本内容如下
$cat file
MD_D1TS_1_060_I
MD_D1TS_1_061_F
MD_D1TS_1_062_U
MD_D1TS_1_002_U
MD_D1TS_1_027_I
MD_D1TS_1_028_U
MD_D1TS_1_003_I
MD_D1TS_1_004_F
MD_D1TS_1_030_I
MD_D1TS_1_005_U
MD_D1TS_1_031_F
MD_D1TS_1_032_I
MD_D1TS_1_006_U
MD_D1TS_1_007_I
MD_D1TS_1_033_F
MD_D1TS_1_034_U
MD_D1TS_1_008_I
MD_D1TS_1_009_U
MD_D1TS_1_035_I
MD_D1TS_1_036_F

就是简单的替换,ctrl + F功能就能搞定的事
但由于数量太多13000+条数据,时间会浪费很多,而且容易出错
只需要每次把替换的内容修改一下,替换的内容都记录在文本name2name中
直接按照文本执行就可以了

$cat name2name
MD_D1TS_1_060   ATS1-1-60
MD_D1TS_1_061   ATS1-1-61
MD_D1TS_1_062   ATS1-1-62
MD_D1TS_1_002   ATS1-1-2
MD_D1TS_1_027   ATS1-1-27
MD_D1TS_1_028   ATS1-1-28
MD_D1TS_1_003   ATS1-1-3
MD_D1TS_1_004   ATS1-1-4
MD_D1TS_1_030   ATS1-1-30
MD_D1TS_1_005   ATS1-1-5
MD_D1TS_1_031   ATS1-1-31
MD_D1TS_1_032   ATS1-1-32
MD_D1TS_1_006   ATS1-1-6
MD_D1TS_1_007   ATS1-1-7
MD_D1TS_1_033   ATS1-1-33
MD_D1TS_1_034   ATS1-1-34
MD_D1TS_1_008   ATS1-1-8
MD_D1TS_1_009   ATS1-1-9
MD_D1TS_1_035   ATS1-1-35
MD_D1TS_1_036   ATS1-1-36
思路

遇到这个问题第一反应就是使用sed,还有就是windows下的notepad++,sublime等软件

但这里最重要的就是将name2name文件进行存储
然后按照这个对应处理

最后想了想还是用awk的数组最熟悉

将要替换的文件内容作为下标key,替换的内容作为值value
然后再读取下一个文件处理

遇到问题

这里算是一个小坑吧,记录下
原来都是直接将文件复制到vim里,然后处理
看内容太多了,使用剪切板速度慢,干脆直接用ftp传入
结果文件处理结果跟我不一样
后来就用了20行测试了一下,想看下问题出在哪里,得到的结果是正确的
我懵逼了,难道awk的数组有限制?毕竟13000+的内容
突然反应过来,windows下的格式问题
$dos2unix filename

解决
awk 'NR==FNR{a[$1]=$2;next}{for(i in a){sub(i,a[i])};print}' name2name file
简单的说明一下
使用NR==FNR;next功能等于将name2name文件内容存入数组
for(i in a)想要读取文件下标只有使用这个方法,而且没有顺序(哈希,我也不懂,但知道是随机顺序)
sub(find,replace) 这是awk一个自带的函数,就是一个replace功能

转载于:https://www.cnblogs.com/irockcode/p/7906192.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值