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
Bash 需要使awk抑制到标准输出的输出_Bash_Shell_Awk - Fatal编程技术网

Bash 需要使awk抑制到标准输出的输出

Bash 需要使awk抑制到标准输出的输出,bash,shell,awk,Bash,Shell,Awk,我想使用awk作为我的解决方案,解析记录行循环,直到max元素,直到NF,然后将一些字段存储在bash变量中。我能够得到我需要的记录,但无法避免awk打印 它自己输出到标准输出 这就是我采用的例子 newvar=$(echo "Hello, this is a sentence with a few words." | awk '{ s = ""; for (i = 0; i <= 5; i++) s = s $i " "; print s }' 我尝试通过执行1>&-as将标准输出抑制

我想使用awk作为我的解决方案,解析记录行循环,直到max元素,直到NF,然后将一些字段存储在bash变量中。我能够得到我需要的记录,但无法避免awk打印 它自己输出到标准输出

这就是我采用的例子

newvar=$(echo "Hello, this is a sentence with a few words." | awk '{ s = ""; for (i = 0; i <= 5; i++) s = s $i " "; print s }'
我尝试通过执行1>&-as将标准输出抑制为null

我犯了一个很难看的错误说

awk:FILENAME=-FNR=1警告:写入标准输出错误文件描述符时出错


在这里或任何地方都找不到一个合适的答案。这在awk中是可能的吗?重复的确切职位,如果发现是感激

这里的问题是您正在从0循环到5。这意味着您将$0存储在变量s中,正如您所知,$0包含完整记录。这意味着您正在存储完整记录,后跟前5个字段

所以只需从1循环到5:

$ awk '{s = ""; for (i = 1; i <= 5; i++) s = s $i " "; print s }' <<< "Hello, this is a sentence with a few words."
Hello, this is a sentence 

为什么不更正错误而不是抑制错误消息?如果您在行的末尾添加右括号,我想您的意思是在1和5之间循环,因为0包含匹配行上的所有单词。@Kusalananda:不太确定您的意思@帕托伊斯:我真傻!应该避免0美元,谢谢你time@to_whoever_downvoted:请提供我在这篇文章中没有提供的信息。这是非常基本的东西!接受它!没有比这更有效的答案了!
$ newvar=$(echo "Hello, this is a sentence with a few words." | awk '{ s = ""; for (i = 0; i <= 5; i++) s = s $i " "; print s }'  1>&- )
$ awk '{s = ""; for (i = 1; i <= 5; i++) s = s $i " "; print s }' <<< "Hello, this is a sentence with a few words."
Hello, this is a sentence 
$ cut -d' ' -f-5 <<< "Hello, this is a sentence with a few words."Hello, this is a sentence