Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15531104
  • 博文数量: 2005
  • 博客积分: 11986
  • 博客等级: 上将
  • 技术积分: 22535
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-17 13:56
文章分类

全部博文(2005)

文章存档

2014年(2)

2013年(2)

2012年(16)

2011年(66)

2010年(368)

2009年(743)

2008年(491)

2007年(317)

分类:

2009-01-09 12:41:52

将awk脚本嵌入到shell的测试源程序
 #!/bin/sh

# 如下是将awk嵌入到shell脚本中[luther.gliethttp]
# 但如果awk这么长的话,还不如写在一个单独的文件中,然后在头部加入
# #!/usr/bin/awk -f

shell_var='8888888888888888888888888888'

awk '
function gliethttp_func(str) {
    # Arr[]
    len = length(str)
    pos = index(str, ".") # 找到
    str1 = substr(str, pos)
    str2 = substr(str, pos, 3) # 只取3个
    nums = split(str, l_Arr, /[lg.]/) # 这个Arr就是下面的Arr,所以变量一定要注意本地化
    # split将从当前位置开始取字符串,直到遇上以上的字符,那么本次字符串取操作完成
    # 存入数组,然后继续从下一个字符开始继续重复取字符串[luther.gliethttp]
    # split(str, Arr, ".")
    print str

    # 经过split分割之后生成的数组l_Arr,将以1...等数字下标开始
    for (i in l_Arr) {
        printf("l_Arr[%d] = %s\n", i, l_Arr[i])
        # printf("l_Arr[%s] = %s\n", i, l_Arr[i])
    }

    print "======"
    for (i = 1; i <= nums; i++) {
        print l_Arr[i]
    }
}

function luther_func() {
    # arrays[]
    arrays[0,0] = "00" # awk只接受字符数组下标,所以这里数字0,0就已经被awk自动转换为"0\0340"了,因为SUBSEP默认为034
    arrays[0,1] = "01"
    arrays[1,0] = "10"
    arrays[1,1] = "11"

# idx = 2 SUBSEP 79
# print Arr[idx]
    for (i in arrays) {
        printf("arrays[%s] = %s\n", i, arrays[i])
    }

    print "" # 加一个回车

    for (i = 0; i < 2; i++)
     for (j = 0; j < 2; j++) {
         idx = i SUBSEP j
         # print arrays[idx]
         outs = sprintf("arrays[%s] = %s", idx, arrays[idx])
         print outs
     }
}

BEGIN {
    a = 1
    b = 1
    Arr[0] = 12
    Arr[1] = 34
    Arr["luther"] = 1 # 这和python的字典很相似
    Arr["hello"] = "yyyyy"
    
    srand() # 以系统时间为随机数启始的种子,或者strand(x)自己指定种子
    for(i = 0; i < ARGC; i++) {
        printf("%d\n", rand()*100000)
        print rand()
        print int(rand()*1000)
        print ARGV[i] # 依次印出awk所记录的参数
    }

    while (++x <= 10) {
        print a
        t = a
        a += b
        b = t
    }
    
    print Arr["luther"]
    print Arr["hello"]

    gliethttp_func("alutherb.cgdliethttp")
    
    delete Arr["luther"] # 释放数组元素"luther"占用的内存空间
    delete Arr[0]

    for (i in Arr) {
        print Arr[i]    
    }

    luther_func()
    
    print "'$shell_var'"
    exit 26
}
'

luther@gliethttp:/vobs/awk$ ./awk_shell.sh
8522
0.378768
950
awk
1
2
3
5
8
13
21
34
55
89
1
yyyyy
alutherb.cgdliethttp
l_Arr[1] = a
l_Arr[2] = utherb
l_Arr[3] = c
l_Arr[4] = d
l_Arr[5] = iethttp
======
a
utherb
c
d
iethttp
yyyyy
34
arrays[00] = 00
arrays[01] = 01
arrays[10] = 10
arrays[11] = 11

arrays[00] = 00
arrays[01] = 01
arrays[10] = 10
arrays[11] = 11
8888888888888888888888888888
luther@gliethttp:/vobs/awk$ echo $?
26
luther@gliethttp:/vobs/awk$

阅读(1923) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~