标题: [其他] 【已解决】gawk:多次提取指定个数范围的字符,如何合并完成 [打印本页]
作者: 思想之翼 时间: 7 天前 12:04 标题: 【已解决】gawk:多次提取指定个数范围的字符,如何合并完成
本帖最后由 思想之翼 于 2024-12-18 19:26 编辑
D:\A.txt 格式如下:
G B B
B C C C C C C C C C
J A A A A A
J
E E
E D E E E E
下列3行代码,分别提取 A.txt 个数范围为N=1,2-5 N=2,3-7 N=3,6-9 的字符,结果分别写入1.txt 2.txt 3.txt:- gawk -v"N=1,3-5" -v"RS=\r?\n| " -v"ORS= " "{++d[$0]}END{split(N,M,/[^0-9]+/,s);A[M[1]];for(j in s){if(s[j]==\"-\"){for(i=M[j];i<=M[j+1];i++)A[i]}else{A[M[j+1]]}};for(j in A){for(i in d)if(d[i]==j)for(k=1;k<=d[i];k++)print i}}" D:\A.txt > D:\1.txt
复制代码
- gawk -v"N=1,4-7" -v"RS=\r?\n| " -v"ORS= " "{++d[$0]}END{split(N,M,/[^0-9]+/,s);A[M[1]];for(j in s){if(s[j]==\"-\"){for(i=M[j];i<=M[j+1];i++)A[i]}else{A[M[j+1]]}};for(j in A){for(i in d)if(d[i]==j)for(k=1;k<=d[i];k++)print i}}" D:\A.txt > D:\2.txt
复制代码
- gawk -v"N=3,6-9" -v"RS=\r?\n| " -v"ORS= " "{++d[$0]}END{split(N,M,/[^0-9]+/,s);A[M[1]];for(j in s){if(s[j]==\"-\"){for(i=M[j];i<=M[j+1];i++)A[i]}else{A[M[j+1]]}};for(j in A){for(i in d)if(d[i]==j)for(k=1;k<=d[i];k++)print i}}" D:\A.txt > D:\3.txt
复制代码
【问题】
上述3行代码,对 A.txt 解析了3次,如何合并代码,对 A.txt 解析1次后,分别提取N=1,2-5 N=2,3-7 N=3,6-9 的字符,写入1.txt 2.txt 3.txt
作者: aloha20200628 时间: 7 天前 17:53
回复 1# 思想之翼
眼看awk一大串 ‘长龙’,不禁批处技痒,代码如下,严格依照楼主要求,吃一遍 ‘鱼’ 吐三段 ‘骨头’ ...- @echo off &setlocal &(for /f "delims=" %%a in (a.txt) do for %%x in (%%a) do echo,%%x)>-.-
- for /f %%a in ('sort -.-') do set/a "_#%%a+=1"
- for /f "tokens=1-2 delims=_#=" %%a in ('set _#') do (
- if %%b geq 1 if %%b leq 5 (set/p="%%a"<nul)>>1.txt
- if %%b geq 2 if %%b leq 7 (set/p="%%a"<nul)>>2.txt
- ((if %%b equ 3 set/p="%%a"<nul) & (if %%b geq 6 if %%b leq 9 set/p="%%a"<nul))>>3.txt)
- del/q "-.-" &pause&exit/b
复制代码
作者: hfxiang 时间: 7 天前 18:59
回复 1# 思想之翼
N不能写成3个,而是要写在一起,用&做分隔(-v"N=1,3-5&1,4-7&3,6-9")- gawk -v"N=1,3-5&1,4-7&3,6-9" -v"RS=\r?\n| " -v"ORS= " "{++d[$0]}END{split(N,n,/&/);for(l in n){split(n[l],M,/[^0-9]+/,s);A[M[1]];for(j in s){if(s[j]==\"-\"){for(i=M[j];i<=M[j+1];i++)A[i]}else{A[M[j+1]]}};for(j in A){for(i in d)if(d[i]==j)for(k=1;k<=d[i];k++)print i>(\"D:/\"l\".txt\")}delete A;delete M;delete s;}}" "D:\A.txt"
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |