标题: [文本处理] 【已解决】gawk:如何全部提取指定个数范围的字符 [打印本页]
作者: 思想之翼 时间: 2024-12-17 19:39 标题: 【已解决】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的字符:- 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
作者: hfxiang 时间: 2024-12-17 19:49
回复 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
复制代码
作者: 思想之翼 时间: 2024-12-17 22:18
本帖最后由 思想之翼 于 2024-12-18 00:40 编辑
回复 2# hfxiang
感谢帮助! 实际运用中,遇到新问题。- 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
作者: Five66 时间: 2024-12-18 01:53
本帖最后由 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
作者: hfxiang 时间: 2024-12-18 08:59
回复 3# 思想之翼
试试这个- 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
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |