filename.csv
包含:
public|database|subs_vw|5|6|9|3|10|1
基本上我的脚本是这样的:
#!/bin/bash
function replace_col(){
prep_cmd="awk -F\| 'BEGIN {srand()}
{sub(\$$1,\"Sa\"int(rand()*100000)\"GA\"); print}' \
$tablename.data > $tablename.ano"
echo $prep_cmd
eval $prep_cmd
}
tablename="subs_vw"
gawk 'BEGIN {FS="|"}
{ for(i=4;i<=NF;i++)
var="echo $i"
echo $var
replace_col $i
}' < filename.csv
将文件作为输入,它取值正确但不调用函数。基本上我想要替换所有指定的列,例如5 | 6 | 9 | 3 | 10 | 1由随机数字组成。有人可以帮帮我吗?
答案 0 :(得分:2)
简单的for
循环可以达到目的。
gawk 'BEGIN {FS="|"}
{ print "SCHEMA :" $1
print "DATABASE :" $2
print "TABLENAME :" $3
for(i=4;i<=NF;i++)
print "COLUMN :" $i
}' filename.txt
此处NF
是每行中的字段数,列数。
for(i=4;i<=NF;i++)
将从第4列迭代到列的末尾。
修改
用随机数替换|5|6|9|3|10|1
。
awk -F\| '{OFS = "|";for(i=4;i<NF;i++) $i= int(rand()*100); print $0 }' inputfile
将产生一个输出
public|database|subs_vw|23|29|84|15|58|1
它的作用
$i= int(rand()*100)
第i个字段被随机数替换。
rand()
会在0
和1
int()
将值截断为整数
print $0
打印整个记录。
EDIT2
将5 6 9 10
更改为随机值
$awk -F\| 'BEGIN{OFS = "|"; indx[1]=5; indx[2]=6; indx[3]=9; indx[4]=10 }{for(i in indx) if(indx[i]<=NF) $indx[i]=int(rand()*100); print $0 }' file
public|database|subs_vw|5|29|84|3|10|15|23