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

时间:2019-08-06 12:49:18

标签: shell unix awk

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

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

 awk '/.edu  { sub(".edu",".edu")}}1' | sed 's/\.edu/.fail/g' < temp1.txt >> output.txt

2 个答案:

答案 0 :(得分:1)

此:

awk 'script' | sed 'script' < file

告诉sed期望它的输入来自awk的输出,但是然后说:“哦,不用等-从文件中取出它”。它还告诉awk在没有输入的情况下运行,因此它将挂起,等待您键入内容。您可能想写成这样:

awk 'script' file | sed 'script'

因此awk读取file并将其输出通过管道传递到sed。话虽如此,您无需将awk输出通过管道传递给sed,您可以在原始awk脚本中执行任何操作。您写道:

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

并在评论中说:

  

我的要求是:如果在输入中看到.edu或.eda,请用.fail替换它。如果该行同时包含.eda和.edu,则仅将.edu替换为.fail并保持.eda不变。

所以这可能是您真正想要的(未经测试,因为您没有提供任何示例输入/输出来进行测试:

awk '!sub(/\.edu/,".fail"){sub(/\.eda/,".fail")}1' temp1.txt

答案 1 :(得分:0)

您确定

urlpatterns = [
    path('', v.ReportHome.as_view(), name='ReportHome'),
    path('_sidebar', v.SelectorSidebar.as_view(), name='SelectorSidebar'),
]

正在做什么?在出现awk '/.edu | .eda/{c++; if (c==2) { sub(".edu",".edu")}}1' <any character>edu的第二行上,它用.edu替换<any characyer>eda

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

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

<any character>edu

我想这就是为什么您会遇到I / O错误的原因。

如果awk命令很有用,请执行以下操作:

awk ... | sed 's/\.edu/.fail/g' < temp1.txt

如果awk命令没用,请执行以下操作:

awk '/.edu | .eda/{c++; if (c==2) { sub(".edu",".edu")}}{gsub("\.edu",".fail")}1' temp1.txt >> output.txt

  

我的要求是:如果在输入中看到.edu或.eda,请用.fail替换它。如果该行同时包含.eda和.edu,则仅将.edu替换为.fail并保持.eda不变

输入示例:

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

代码:

.eda
.edu .eda
.eda .edu
.edu
hello world

您将获得:

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