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

[文本处理] 【已解决】gawk:如何全部提取指定个数范围的字符

本帖最后由 思想之翼 于 2024-12-18 08:28 编辑

D:\JZ\A.txt  每行记录若干字符,格式如下:
G B B
B C
J A A A A
J
E
E D E E E E
下列代码,提取个数范围为2-4,6的字符:
  1. gawk -v"N=2-4,6" -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)print i}}" D:\JZ\A.txt > D:\JZ\B.txt
复制代码
结果为:
J B A E

【问题】
如何使用gawk,全部提取指定个数范围的字符,结果为:
J J B B B A A A A E E E E E E

回复 1# 思想之翼
  1. gawk -v"N=2-4,6" -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<=j;k++)print i}}" D:\JZ\A.txt > D:\JZ\B.txt
复制代码
1

评分人数

TOP

本帖最后由 思想之翼 于 2024-12-18 00:40 编辑

回复 2# hfxiang

感谢帮助! 实际运用中,遇到新问题。
  1. gawk -v"N=2,100-200" -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<=j;k++)print i}}" D:\A.txt > D:\B.txt
复制代码
提取下列A.txt数值,结果为:J J E E
想要的结果为:J J E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E

A.txt
G B B A A
B C
J A A
J
E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E
E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E

TOP

本帖最后由 Five66 于 2024-12-18 02:18 编辑

回复 3# 思想之翼


   
将 for(k=1;k<=j;k++)print i 那部分中的
k<=j
换成
k<=int(j)

或者将
k=1;k<=j
换成
k=0;k!=j

或者整个换成
for(k=int(j);k>0;k--)print i
1

评分人数

TOP

回复 3# 思想之翼

试试这个
  1. gawk -v"N=2,100-200" -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:\B.txt
复制代码
1

评分人数

TOP

返回列表