Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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
Shell 为什么awk会给我一个致命错误:I/O?_Shell_Unix_Awk - Fatal编程技术网

Shell 为什么awk会给我一个致命错误:I/O?

Shell 为什么awk会给我一个致命错误:I/O?,shell,unix,awk,Shell,Unix,Awk,我试图在我的脚本中执行以下代码。 这是我代码中的一小部分,它在成功执行脚本后引发I/O错误 我使用的代码有什么问题吗。我不需要在输出后在屏幕上打印错误消息 awk'/.edu{sub.edu,.edu}}1'| sed's/\.edu/.fail/g'>output.txt 你确定吗 awk '/.edu | .eda/{c++; if (c==2) { sub(".edu",".edu")}}1' 你在做你期望的事吗?在显示eda或edu的第二行中,它将edu替换为.edu 这方面的另一个

我试图在我的脚本中执行以下代码。 这是我代码中的一小部分,它在成功执行脚本后引发I/O错误

我使用的代码有什么问题吗。我不需要在输出后在屏幕上打印错误消息

awk'/.edu{sub.edu,.edu}}1'| sed's/\.edu/.fail/g'>output.txt 你确定吗

awk '/.edu | .eda/{c++; if (c==2) { sub(".edu",".edu")}}1' 
你在做你期望的事吗?在显示eda或edu的第二行中,它将edu替换为.edu

这方面的另一个错误:您没有为此awk命令提供任何输入

然后将temp1.txt的内容和awk的标准输出重定向到sed,这也很奇怪

awk ... | sed 's/\.edu/.fail/g' < temp1.txt
如果awk命令无效,请执行以下操作:

sed 's/\.edu/.fail/g' temp1.txt >> output.txt

我的要求是:如果在我的输入中,我看到了.edu或.eda,请将其替换为.fail。如果该行同时具有.eda和.edu,则仅将.edu替换为.fail keeping.eda

输入示例:

.eda
.edu .eda
.eda .edu
.edu
hello world
代码:

awk '!/\.edu/{gsub(/\.eda/,".fail")}{gsub(/\.edu/, ".fail")}1' test.txt >> output.txt
您将获得:

.fail
.fail .eda
.eda .fail
.fail
hello world
这:

所以awk读取文件并将其输出到sed。话虽如此,您永远不需要将awk输出通过管道传输到sed,您可以在原始awk脚本中执行任何您想要的操作。你写道:

awk '/.edu | .eda/{c++; if (c==2) { sub(".edu",".edu")}}1' | sed 's/\.edu/.fail/g' < temp1.txt

嗨,贝丝,欢迎来到SO!请编辑您的问题并添加一些上下文,例如,您试图实现的目标,期望的输出应该是什么样子?我建议您问这个问题,哪个似乎更适合与shell相关的问题。为了帮助人们回答您的问题,您需要更具体地说明错误。请你的帖子包含你从你的网站上得到的确切错误,最好使用复制+粘贴来避免抄写错误。我的要求是:如果在我的输入中,我看到了.edu或.eda,用.fail替换它。如果该行同时具有.eda和.edu,则仅将.edu替换为.fail keeping.eda,因为它会向我发出警告。你能把它移走吗?请努力一下@BethMckey。什么警告,在哪种情况下?@EdMorton谢谢!我的awk没有收到任何警告,很高兴知道它的便携性。事实上,这是一个很好的警告,应该通过切换到重新分隔符或加倍反斜杠来执行-你可能想升级你的awk:-。谢谢你为我工作。请向我解释awk的上述用法,并帮助我解决在output@BethMckey什么警告?Awk:warning:转义序列'\.'被视为普通'.'没有考虑使用sub.Nice的返回值one@BethMckey你应该肯定地接受这个答案,因为它和我的答案一样,有更好的解释&更好的解释代码性能更好,因为它只搜索一次edu
awk 'script' | sed 'script' < file
awk 'script' file | sed 'script'
awk '/.edu | .eda/{c++; if (c==2) { sub(".edu",".edu")}}1' | sed 's/\.edu/.fail/g' < temp1.txt
awk '!sub(/\.edu/,".fail"){sub(/\.eda/,".fail")}1' temp1.txt