使用Awk和Fork

时间:2017-04-04 14:45:54

标签: bash awk cygwin

我编写了一个脚本,它接受了一个csv文件,并用第二列的HASH替换了第三列的字符串(Key)。 在256行之后,我收到了错误

  

awk:cmd。第3行:(FILENAME = C:/hanatest/test.csv FNR = 257)致命:   无法为`echo -n创建子进程   E5360712819A7EF1584E2FDA06287379FF5CC3E0A5M7J6PiQMaSBut52ZQhVlS4 |   openssl ripemd160 | cut -f2 -d“”'(fork:资源暂时   不可用)

我更改了CSV文件,256行后总是出现相同的错误。

这是我的代码:

awk -F "," -v env_var="$key" '{
    tmp="echo -n "$2env_var" | openssl ripemd160 | cut -f2 -d\" \""
tmp | getline cksum
$3=toupper(cksum)
print
}' //test/source.csv > //ziel.csv

你能帮帮我吗?

这是我的示例输入:

25,XXXXXXXXXXXXXXXXXX,?
44,YYYYYYYYYYYYYYYYYY,?
84,ZZZZZZZZZZZZZZZZZZ,?

这是我的预期输出:

25,XXXXXXXXXXXXXXXXXX,301E2A8BF32A7046F65E48DF32CF933F6CAEC529
44,YYYYYYYYYYYYYYYYYY,301E2A8BF32A7046F65E48EF32CF933F6CAEC529
84,ZZZZZZZZZZZZZZZZZZ,301E2A8BF32A7046F65E48EF33CF933F6CAEC529

提前致谢

1 个答案:

答案 0 :(得分:3)

让我们首先让你的代码更健壮:

awk -F "," -v env_var="$key" '{
    tmp="echo -n \047" $2 env_var "\047 | openssl ripemd160 | cut -f2 -d\047 \047"
    if ( (tmp | getline cksum) > 0 ) {
        $3 = toupper(cksum)
    }
    close(tmp)
    print
}' /test/source.csv > /ziel.csv

现在 - 你还有问题吗?如果您正在考虑使用getline,请务必阅读并完全理解http://awk.freeshell.org/AllAboutGetline中讨论的正确用法和所有警告。