在awk中执行命令(生成随机字符串)

时间:2016-09-11 09:25:20

标签: bash awk

我使用以下AWK代码行替换了逗号分隔文件中所有出现的7833,其中包含100到400之间的随机整数。

awk -F \, 'BEGIN { OFS = FS } $NF == 7833 { $NF = int(rand() * 300 + 100) } 1' ./OldFile.txt > ./NewFile.txt

这完全有效但现在我想用以下命令中的随机字符串替换7833。

cat /dev/urandom | tr -cd 'A-Z0-9' | head -c 10

我尝试使用以下命令,但它无效。

awk -F \, 'BEGIN { OFS = FS } $NF == 7833 { $NF = `cat /dev/urandom | tr -cd 'A-Z0-9' | head -c 10` } 1' ./OldFile.txt > ./NewFile.txt

你能帮忙吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

来自AWK手册页:

system(cmd)
executes cmd and returns its exit status

GNU AWK手册还有一个部分,它描述了系统功能并提供了一个例子:

system("date | mail -s 'awk run done' root")

现在你应该使用这样的东西:

awk -F \, 'BEGIN { OFS = FS } $NF == 7833 { $NF = system("cat /dev/urandom | tr -cd 'A-Z0-9' | head -c 10") } 1' ./OldFile.txt > ./NewFile.txt