Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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
Linux 逃跑~!在awk(bash命令)中,反斜杠不是行中的最后一个字符_Linux_Bash_Shell_Awk - Fatal编程技术网

Linux 逃跑~!在awk(bash命令)中,反斜杠不是行中的最后一个字符

Linux 逃跑~!在awk(bash命令)中,反斜杠不是行中的最后一个字符,linux,bash,shell,awk,Linux,Bash,Shell,Awk,我正在尝试以以下格式运行bash命令: declare "test${nb}"="$(cat file.txt | awk '{if($3>0.5 && $3 !~ "ddf") $2="NA"; print $1,$2}')" 其中,$nb是一个int(例如2),file.txt包含一个具有各种数字和字符串值的表(如果需要,我可以提供更多详细信息,但在这里不相关) 运行此命令时,外壳将替换!~查找我拥有的文件名(不确定原因)。我试着用反斜杠来逃避这个: declare

我正在尝试以以下格式运行bash命令:

declare "test${nb}"="$(cat file.txt | awk '{if($3>0.5 && $3 !~ "ddf") $2="NA"; print $1,$2}')"
其中,$nb是一个int(例如2),file.txt包含一个具有各种数字和字符串值的表(如果需要,我可以提供更多详细信息,但在这里不相关)

运行此命令时,外壳将替换!~查找我拥有的文件名(不确定原因)。我试着用反斜杠来逃避这个:

declare "test${nb}"="$(cat file.txt | awk '{if($3>0.5 && $3 \!~ "ddf") $2="NA"; print $1,$2}')"
但是我得到了这个错误:

awk: {if($3>0.5 && $3 \!~ "ddf") $2="NA"; print $1,$2}
awk:                  ^ backslash not last character on line
我还尝试将该表包含在变量“var”中,并按如下方式编写:

declare test[$nb]=$(echo "$var" | awk '{if($3>0.5 && $3 !~ "ddf") $2="NA"; print $1,$2}')
这样就没有错误了,但是输出只是表的第一列的第一个字段,当我不展开变量名时就不是这样了。例如,如果我这样做:

declare test2=$(echo "$var" | awk '{if($3>0.5 && $3 !~ "ddf") $2="NA"; print $1,$2}')
然后,它可以完美地工作,test2具有预期的值。但我需要能够使用任何数字,而不是2(类似于test[$nb])

你知道我该怎么解决这个问题吗?任何帮助都将不胜感激

谢谢

请不要引用:

$ declare x="$( echo '!' )"
-bash: !': event not found
$ declare x=$( echo '!' )
$ echo "$x"
!
但是,您的语句还有很多其他问题,包括UUOC、使用标量模拟数组、非惯用awk语法等。请尝试以下方法:

declare test[$nb]=$( awk '{print $1, (($3 > 0.5) && ($3 !~ /ddf/) ? "NA" : $2)}' file.txt )
失去报价:

$ declare x="$( echo '!' )"
-bash: !': event not found
$ declare x=$( echo '!' )
$ echo "$x"
!
但是,您的语句还有很多其他问题,包括UUOC、使用标量模拟数组、非惯用awk语法等。请尝试以下方法:

declare test[$nb]=$( awk '{print $1, (($3 > 0.5) && ($3 !~ /ddf/) ? "NA" : $2)}' file.txt )

您是说以交互方式输入命令,还是从文件(即脚本)运行命令?历史的扩展!~仅在交互使用时发生。顺便说一句,bash手册页说:如果启用,历史扩展将被执行,除非!出现在双引号中时使用反斜杠进行转义。前面的反斜杠!未删除

这意味着,只要编写脚本(或者更准确地说,只要没有交互式shell),就不必担心“!”的特殊含义

如果您有一个交互式shell并且历史扩展困扰您,您可以通过

set +H

您是说以交互方式输入命令,还是从文件(即脚本)运行命令?历史的扩展!~仅在交互使用时发生。顺便说一句,bash手册页说:如果启用,历史扩展将被执行,除非!出现在双引号中时使用反斜杠进行转义。前面的反斜杠!未删除

这意味着,只要编写脚本(或者更准确地说,只要没有交互式shell),就不必担心“!”的特殊含义

如果您有一个交互式shell并且历史扩展困扰您,您可以通过

set +H

我尝试了这个方法,但是当我尝试echo“$test2”(例如,如果nb=2)时,它有一个空的输出…我尝试将表放在变量“var”中,并这样写:declare test[$nb]=$(echo“$var”| awk'{if($3>0.5&&$3!~“ddf”)$2=“NA”;print$1,$2})。没有错误,但输出只是表的第一列的第一个字段,当我不展开变量名时,情况并非如此。例如,如果我这样做:declare test2=$(echo“$var”|awk'{if($3>0.5&&$3!~“ddf”)$2=“NA”;print$1,$2}'),那么它工作得很好,test2具有预期的值。我尝试了这个方法,但当我尝试echo“$test2”(例如,如果nb=2)时,它有一个空输出……我尝试将表放在变量“var”中这样写:declare test[$nb]=$(echo“$var”| awk'{if($3>0.5&&$3!~“ddf”)$2=“NA”;print$1,$2})。没有错误,但输出只是表的第一列的第一个字段,当我不展开变量名时,情况并非如此。例如,如果我这样做:declare test2=$(echo“$var”| awk'{if($3>0.5&&$3!~“ddf”)$2=“NA”;print$1,$2}'),那么它工作得很好,test2具有预期的值。