- 论坛徽章:
- 2
|
yestreenstars 发表于 2013-10-28 16:56 ![]()
回复 20# damcool
闲来没事,比较了下目前所有脚本的效率:
很不错的比较,让我了解到REGEXP函数或相关的功能效率很差,我修订了一版。速度一下子上去了。另外好像a1a2a1a2版有点问题。- #!/bin/awk
- BEGIN{
- ord["A"]=1;
- ord["B"]=2;
- ord["C"]=3;
- ord["D"]=4;
- }
- {
- n=split($0,a,"");
- for (i=1;i<=n;i++)
- {
- if (toupper(a[i])=="X")
- {
- for (j=i-1;j>=i-ord[toupper(a[i-1])];j--)
- {
- if (ord[toupper(a[j])]==0) break;
- a[j]=tolower(a[j]);
- }
- x=ord[toupper(a[i+1])];
- a[i]="x";
- b[i]=5;
- }
- else
- {
- b[i]=(b[i]>4)?ord[toupper(a[i])]:b[i];
- if (x>0 || b[i]>0)
- {
- x=(x>0)?--x:0;
- b[i]=(b[i]>0)?--b[i]:0;
- a[i]=tolower(a[i]);
- }
- }
- }
- l="";x=0;
- for (i=1;i<=n;i++) l=l""a[i];
- m[++k]=l;
- }
- END{
- for (i=k;i>0;i--)
- {
- n=split(m[i],a,"");
- l="";x=0;
- for (j=1;j<=n;j++)
- {
- if (toupper(a[j])=="X")
- {
- l=l"x";
- c[j]=5;
- }
- else
- {
- c[j]=(c[j]>4)?ord[toupper(a[j])]:c[j];
- if (c[j]>0)
- {
- c[j]--;
- l=l""tolower(a[j]);
- }
- else l=l""a[j];
- }
- }
- m[i]=l;
- }
- for (i=1;i<=k;i++) print m[i];
- }
复制代码 比较结果如下图:
|
评分
-
查看全部评分
|