首页 > 代码库 > awk: 随机替换(使用文件中的行随机替换另一文件中的列)

awk: 随机替换(使用文件中的行随机替换另一文件中的列)

#!/bin/awk -f
#Function:指定使用文件中随机数量的行(手动传参ipl和idl)随机替换指定列(脚本中指定);使用指定位数的随机浮点替换指定列(脚本中指定)。
#Usage:./t.awk -v ip=<ip file> -v id=<id file> -v ipl=<n> -v idl=<n> log.txt
#Date: 20140922 20:16
BEGIN {
    srand()
    #读取预用的ip列表
    while (getline randip < ip) {
        #所有ip列表中的行数;该变量稍后供取ip列表中指定限制使用的随机行数用。
        i++
        randip_list[i] = randip
    }
    #读取预用的id列表
    while (getline randid < id) {
        #所有id列表中的行数;该变量稍后供取id列表中指定限制使用的随机行数用。
        j++
        randid_list[j] = randid
    }

    #以下两行:如果指定列表中要使用的行数大于实际行数则退出。
    if (ipl > i) {exit}
    if (idl > j) {exit}

    #从ip列表总行数,取指定限制使用行的数量。
    for (k=1; k<=ipl; k++) {
        limitip_i[k] = 1 + int(rand() * i)
    }
    #从id列表总行数,取指定限制使用行的数量。
    for (l=1; l<=idl; l++) {
        limitid_i[l] = 1 + int(rand() * j)
    }
}

{
    #生成ip限制范围内的整数,作为上面限制行数组的下标。
    randip_i = 1 + int(rand() * ipl)
    #生成id限制范围内的整数,作为上面限制行数组的下标。
    randid_i = 1 + int(rand() * idl)
    #以下两行:使用限制的行随机替换ip和id。
    $1 = randip_list[limitip_i[randip_i]]
    sub(/loginID=[0-9]+/,"loginID="randid_list[limitid_i[randid_i]],$7)
    sub(/tempid=0\.[0-9]+/,"tempid="sprintf("%.18f", rand()),$7)
    print $0
}


本文出自 “notepad” 博客,请务必保留此出处http://sndapk.blog.51cto.com/5385144/1558534

awk: 随机替换(使用文件中的行随机替换另一文件中的列)