- 论坛徽章:
- 93
|
如果你那个是按行处理的话,楼上的办法就行了。如果你那个是想用参数传递,可以试试两个方案(运行结果好像不对,那是代码逻辑的事啦):- ##########################################
- ## 用传参数的方式
- [seesea@UC ~]$ awk -f factorize.awk 10000
- 10000 = 2 * 5000
- [seesea@UC ~]$ awk -f factorize.awk
- No argument.
- [seesea@UC ~]$ cat factorize.awk
- BEGIN {
- if (ARGC < 2)
- {
- print "No argument."
- exit
- }
- fac(ARGV[1])
- }
- function fac(num) {
- n = int(num)
- m = n = (n >= 2) ? n : 2
- factors = ""
- for ( k=2; (m>1)&&(k^2 <= m); )
- {
- if ( int(m%n) != 0 )
- {
- k++
- continue
- }
- m /= k
- factors = (factors=="") ? ("" k) : (factors " * " k)
- }
- if ((1<m) && (m<n))
- factors = factors " * " m
- print n, (factors == "") ? "is prime" : ("= " factors)
- }
- #########################################
- ## 或者用传变量的方式
- [seesea@UC ~]$ awk -v num=1000 -f factorize.awk
- 1000 = 2 * 500
- [seesea@UC ~]$ awk -f factorize.awk
- No argument.
- [seesea@UC ~]$ cat factorize.awk
- BEGIN {
- if (num=="")
- {
- print "No argument."
- exit
- }
- fac(num)
- }
- function fac(num) {
- n = int(num)
- m = n = (n >= 2) ? n : 2
- factors = ""
- for ( k=2; (m>1)&&(k^2 <= m); )
- {
- if ( int(m%n) != 0 )
- {
- k++
- continue
- }
- m /= k
- factors = (factors=="") ? ("" k) : (factors " * " k)
- }
- if ((1<m) && (m<n))
- factors = factors " * " m
- print n, (factors == "") ? "is prime" : ("= " factors)
- }
复制代码 |
|