找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 18244|回复: 2

[其他] 【已解决】gawk:文件内容批量替换,如何将替换文件放第一个处理

[复制链接]
发表于 2023-8-23 09:51:45 | 显示全部楼层 |阅读模式
本帖最后由 思想之翼 于 2023-8-25 00:20 编辑

字典文件e:\字典.txt,记录数值为:
A=X Y Z
B=Y Z
C=Z
替换文件e:\替换.txt,记录数值为:
A
C
输出文件e:\输出.txt,记录数值为:
X Y Z
Z

实现上述替换,代码如下:
gawk -F"=" "NR==FNR{A[$1]=$2;next}{print A[$0]}" e:\字典.txt e:\替换.txt>e:\输出.txt

【问题】
若将替换文件放第一个处理,即 e:\替换.txt e:\字典.txt>e:\输出.txt,上述gawk代码如何修改?

【解答】有误
gawk -F"=" "ARGIND>1{if(b[$1]){a[ARGIND]=a[ARGIND]==\"\"?$2:a[ARGIND] \"\n\" $2;next}}{b[$0]++}END{for(i=2;i<=ARGIND;i++){ if(a){f=ARGV;print(a)}}}" e:\替换.txt e:\字典.txt>e:\输出.txt

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2023-8-23 17:38:06 | 显示全部楼层
呃,刚开始还以为只是单纯的替换,看了解答之后发现原来还得保留原本代码的效果
还有,或许这样比较简洁点

  1. gawk -F"=" "NR==FNR{B[i++]=$0;next}{A[$1]=$2}END{for(i=0;i<length(B);i++){print A[B[i]]}}" e:\替换.txt e:\字典.txt>e:\输出.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
思想之翼 + 1 感谢分享

查看全部评分

发表于 2023-8-24 03:35:03 | 显示全部楼层
啊,抄代码时发现了个细节
简单来讲,如果替换文件包含同样的值时,1楼修改后的gawk代码执行后只会打印输出一个值
例如将替换文件e:\替换.txt修改为:
A
C
A
执行1楼修改后gawk代码后输出为:
X Y Z
Z
与A对应的只输出了一次
而执行原来的gawk输出为:
X Y Z
Z
X Y Z
与A对应的输出了两次
总之要注意一下

评分

参与人数 1技术 +1 收起 理由
思想之翼 + 1 感谢分享

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 18:30 , Processed in 0.022688 second(s), 16 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表