[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 【已解决】gawk:如何合并2段正则表达式代码,以实现不输出中间结果的目的

本帖最后由 思想之翼 于 2023-4-24 17:00 编辑

下述2段正则表达式,代码1输出结果文本A;代码2依据结果文本A,输出结果文本B。
现在欲将这2个代码合二为一,以实现不输出结果文本A这一中间过程,而将其数值储入内存,然后调用内存数值进行运算,输出结果文本B。

代码1:替换文本数值后,输出结果文本A
字典文本
d:\HY\000001\000001_1.txt ~ 000001_7.txt
替换文本
e:\ZD\GD\000001\000001_1.txt ~ 000001_7.txt
结果文本A【实现目标:不写入7个文本,储存在内存,等待代码2调用】
e:\HY\GD\000001\000001_1.txt ~ 000001_7.txt
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%f in (1000001,1,1001798) do (
  4.     set p=%%f
  5.     for /l %%g in (1,1,7) do (
  6. 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[i]){f=ARGV[i];sub(/^d:\\HY/,\"e:\\HY\\GD\",f);print(a[i])>f}}}" "e:\ZD\GD\!p:~1!\!p:~1!_%%g.txt" d:\HY\!p:~1!\!p:~1!_%%g.txt
  7. ))
  8. exit
复制代码
代码2:合并结果文本A 000001_1.txt ~ 000001_7.txt 共7个文本,提取重复N次的字符,输出结果文本B
结果文本A【实现目标:不读入7个文本,调用代码1储存在内存的数据】
e:\HY\GD\000001\000001_1.txt ~ 000001_7.txt
结果文本B
e:\TQ\GD\000001.txt
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%f in (1000001,1,1001798) do (
  4.         set p=%%f
  5. gawk "{for(i=1;i<=NF;i++)a[$i]++}END{for(i in a)if(a[i]==7)print i}" e:\HY\GD\!p:~1!\*.txt>e:\TQ\GD\!p:~1!.txt
  6. )
  7. exit
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 思想之翼 于 2023-4-21 17:01 编辑

回复 4# terse
感谢帮助!经测试,代码没有统计替换后的7个文件中总共出现7次的字符。
简单说,是文本 1替换a,2替换b,3替换c,4替换d,5替换e,6替换f,7替换g,
然后 a+b+c+d+e+f+g,取出现7次的字符。
文本1 2 3 4 5 6 7 在D:\A\01\
文本a b c d e f g  在E:\B\01\
(文本1234567 与 文本abcdefg 同名)
取出的字符,写入F:\C\01.txt

TOP

本帖最后由 思想之翼 于 2023-4-22 17:17 编辑

回复 6# terse

感谢帮助!第2个代码结果正确。替换后的7个文本如果不写入文件夹(非先写入再删除)就完美了。因为替换7个文本,是中间过程,没必要输出,况且体积大,先输出再读入不但费时,而且徒增M.2硬盘擦洗次数。

TOP

回复 10# Five66
感谢帮助!参考您的思路,边学边用,捣鼓了一番不得要领,恳望您结合1#实例,给予指导。

TOP

返回列表