Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash &引用;“资源暂时不可用”;使用Awk和Fork时_Bash_Awk_Cygwin - Fatal编程技术网

Bash &引用;“资源暂时不可用”;使用Awk和Fork时

Bash &引用;“资源暂时不可用”;使用Awk和Fork时,bash,awk,cygwin,Bash,Awk,Cygwin,我编写了一个脚本,它接受一个csv文件,并将第三列替换为第二列的散列,第二列包含一些字符串(键)。 在256行之后,我得到了一个错误 awk:cmd。第3行:(FILENAME=C:/hanatest/test.csv FNR=257)致命: 无法为“echo-n”创建子进程 E5360712819A7EF1584E2FDA06287379FF5CC3E0A5M7J6PiQMaSBut52ZQhVlS4| openssl ripemd160 | cut-f2-d“”(fork:Resource)

我编写了一个脚本,它接受一个csv文件,并将第三列替换为第二列的散列,第二列包含一些字符串(键)。 在256行之后,我得到了一个错误

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

我更改了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

提前感谢

让我们先让您的代码更加健壮:

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,请确保阅读并完全理解正确的用法以及中讨论的所有注意事项。

您正在为每个输入行运行一个新进程,我怀疑没有终止它,因此您达到了256个进程或管道或其他限制。
ulimit-a
说什么?[编辑:事实上,我很困惑你在代码中试图做什么,但我仍然认为你达到了极限。]感谢你的回复,这里是ulimit-a:$ulimit-a核心文件大小(blocks,-c)无限数据段大小(kbytes,-d)无限文件大小(blocks,-f)无限打开文件(-n)256管道大小(512字节,-p)8堆栈大小(KB,-s)2032 cpu时间(秒,-t)无限最大用户进程(-u)256虚拟内存(KB,-v)更改代码以获得我的输出是一个不受限制的想法?因为您没有向我们显示任何示例输入或预期输出-否。但是,要修补您的代码,请在调用getline的行后添加
close(tmp)
,然后阅读以查看您还缺少了什么。类似以下内容应该可以帮助您。。。awk使事情变得复杂:
export IFS=,$'\n';边读边休息;doecho$a$b$(echo$b | openssl ripemd160 | cut-f2-d'')$rest;完成
。。。正如@EdMorton所建议的,你达到了管道极限。谢谢Ed,它适用于样本数据,但当我将其用于大型csv(1Go)时,我认为速度太慢了。我昨天运行脚本,现在我只得到30万。实际上,原始csv数据的大小是1Go,因此我认为它将在一个月后完成。我没有说这是一个好方法,我只是回答了您关于如何避免该错误的问题。看看接下来要做什么。如果你需要帮助想出一个不同的方法,那么发布一个后续问题。