Chinaunix

标题: 怎么把在SHELL下去行的代码改成.sh文件 [打印本页]

作者: tyguaike    时间: 2012-10-03 14:44
标题: 怎么把在SHELL下去行的代码改成.sh文件
awk -v n=4 -v number=2475 'BEGIN{split (number,d,"");
                      for (i=1;i<=n;i++)    # 产生两位数字组合列表
                        { for (j=1;j<=n;j++)
                             if (d[i]<d[j]) a[d[i] d[j] ]
                        }
                      for (i in a)
                        { printf "****  generate the list for [ %s ] .....\n", i;
                          split(i,b,"");x=0
                          for (j=1;j<=n;j++) if (!(b[1]==j||b[2]==j)) c[++x]=j  # 产生该组合的反向组合。
                          system ("seq -w 0000 9999 |egrep \"" b[1] "|" b[2] "\"|grep -v " c[1] "|grep -v " c[2])
                          delete c
                        }
                     }'


我怎么改可以在运行sh的时候在提示我输入2475,我不一定是输入2475也可能是其它的。
还有要是我只输入3个码也可以比如247,这样的话还要改哪里。
因为第次我都要改好2475在复制到SHELL有时多花时间了
作者: rdcwayx    时间: 2012-10-09 10:00
本帖最后由 rdcwayx 于 2012-10-11 14:34 编辑

@tyguaike
这个是为4位数字定制的. 引入一个参数可以解决你的第一个要求
  1. $ cat abc.sh
  2. number=$1
  3. awk -v n=4 -v number=$number 'BEGIN{split (number,d,"");
  4.                       for (i=1;i<=n;i++)    # 产生两位数字组合列表
  5.                         { for (j=1;j<=n;j++)
  6.                              if (d[i]<d[j]) a[d[i] d[j] ]
  7.                         }
  8.                       for (i in a)
  9.                         { printf "****  generate the list for [ %s ] .....\n", i;
  10.                           split(i,b,"");x=0
  11.                           for (j=1;j<=n;j++) if (!(b[1]==j||b[2]==j)) c[++x]=j  # 产生该组合的反向组合。
  12.                           system ("seq -w 0000 9999 |egrep \"" b[1] "|" b[2] "\"|grep -v " c[1] "|grep -v " c[2])
  13.                           delete c
  14.                         }
  15.                      }'
复制代码
如果不是4为数字,代码需要大改动,
作者: tyguaike    时间: 2012-10-09 20:47
好,谢谢了。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2