
【已解決】如何優(yōu)化gawk腳本實現(xiàn)單次解析最后由 思想之翼 于 -3-9 18:56下列3行代碼,分別提取 A.txt 個數(shù)范圍為N=3-5 N=1-2 N=6-100 的字符,寫入1.txt 2.txt
D:DATA 數(shù)據(jù)格式如下:G B BB C C C AJ AJEE DM M M M M MM MN N N N N結(jié)果為:1.txtB C N 2.txtD G A E J M 【問題】上述3行代碼,對 A.txt 解析了3次,如何合并代碼,對 A.txt 解析1次后,分別提取N=3-5 N=1-2 N=6-100 的字符,寫入1.txt 2.txt,減少I/O操作,提升執(zhí)行效率。【注1】下列代碼,運行結(jié)果符合預(yù)期nclick="copycode($('code0'));">復(fù)制代碼
- @echo off
- setlocal enabledelayedexpansion
- gawk -vN=3-5 -vRS=r?n| -vORS= {++d[$0]}END{split(N,M,/-/);for(j=M[1];j<=M[2];j++){for(i in d)if(d[i]==j)print i}} D:DATAA.txt>D:DATA1.txt
- gawk -vN=1-2 -vRS=r?n| -vORS= {++d[$0]}END{split(N,M,/-/);for(j=M[1];j<=M[2];j++){for(i in d)if(d[i]==j)print i}} D:DATAA.txt>D:DATA2.txt
- gawk -vN=6-100 -vRS=r?n| -vORS= {++d[$0]}END{split(N,M,/-/);for(j=M[1];j<=M[2];j++){for(i in d)if(d[i]==j)print i}} D:DATAA.txt>>D:DATA2.txt
- endlocal
- exit
【注2】下列代碼,運行結(jié)果為:1.txtB B B C C C N N N N N 2.txtD G A A E E J J M M M M M M M Mnclick="copycode($('code1'));">復(fù)制代碼
- @echo off
- setlocal enabledelayedexpansion
- for /l %%f in (1,1,500) do (
- set q=%%f
- gawk -vN=3-5&1-2,6-19 -vRS=r?n| -vORS= {++d[$0]}END{split(N,g,/&/);for(l in g){split(g[l],s,/,/);delete A;for(i in s){split(s[i],r,/-/);a=r[1];b=r[2];if(b){for(j=a;j<=b;j++)A[j]}else{A[a]}};for(w in d)if(d[w] in A)print w>>(Z:/KZ/001/lM.txt)}} Z:KZ01!q!.txt
- )
- endlocal
- eixt
nclick="copycode($('code2'));">復(fù)制代碼
- gawk -vN=3-5&1-2,6-19 -vRS=r?n| -vORS= {++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>(Z:/KZ/001/l.txt)}delete A;delete M;delete s;}} Z:KZ01A.txt

