我编写了一个脚本,它接受了一个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
提前致谢
答案 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中讨论的正确用法和所有警告。