命令未找到错误 awk

命令未找到错误 awk

我在这段代码中遇到了这个command not found错误。我想打印一个句子的第一个单词

第一个代码(所需结果= 1)

abc="1 hello world"; L=$($abc|awk '{print $1}'); echo $L
1: command not found

第二个代码(所需结果= mp4)

abc="mp4 hello world"; L=$($abc|awk '{print $1}'); echo $L
No command 'mp4' found, did you mean:
 Command 'mpp' from package 'makepp' (universe)
 Command 'mpy' from package 'yorick-mpy-mpich2' (universe)
 Command 'mpy' from package 'yorick-mpy-openmpi' (universe)
 Command 'mpc' from package 'mpc' (universe)
 Command 'm4' from package 'm4' (main)
 Command 'mp4h' from package 'mp4h' (universe)
 Command 'mpv' from package 'mpv' (universe)
 Command 'mpd' from package 'mpd' (universe)
 Command 'mp' from package 'mp' (universe)
 Command 'mpb' from package 'mpb' (universe)

答案1

您需要echo将变量传递abc给 STDOUT,以便awk可以将其用作 STDIN。虽然在这种情况下您可以避免这种情况,但是总是引用变量(和命令替换),除非您有非常好的理由不这样做(例如,您希望进行路径名扩展和单词拆分):

$ abc="1 hello world"; L="$(echo "$abc" | awk '{print $1}')"; echo "$L"
1

$ abc="mp4 hello world"; L="$(echo "$abc" | awk '{print $1}')"; echo "$L"
mp4

您还可以在这里使用字符串:

$ abc="1 hello world"; L="$(awk '{print $1}' <<<"$abc")"; echo "$L"
1

$ abc="mp4 hello world"; L="$(awk '{print $1}' <<<"$abc")"; echo "$L"
mp4

答案2

笔记:最好将要使用的变量放在引号内,这样它就是您唯一的变量。这样您就不会引入新的变量。

还有一些其他方法可以达到相同的结果。

下面我列出了一些。

abc="1 hello world"; echo "$abc" | awk '{print $1}'

或者

abc="mp4 hello world" && echo "$abc" | awk '{print $1}'

或者如果您想要一个新变量,根据命令替换,使用反引号“`”和“$(command)”仍然是实现您想要的结果的有效方法。更多信息可以找到这里

带有反引号:

abc="mp4 hello world"; L=`echo "$abc" | awk '{print $1}'`; echo "$L"

使用“$(command)”:

abc="1 hello world"; L="$(echo "$abc" | awk '{print $1}')"; echo "$L"

两者都将产生一个新变量“$L”,并将其分配给您指定的内容。

答案3

您需要做的就是添加echo $abc 而不是$abc,如下所示:

abc="1 hello world"; L=$(echo $abc|awk '{print $1}'); echo $L

答案4

在您的命令中... $($abc|awk '{print $1}'); ...,的内容$abc作为命令执行。因此出现错误。

您可以在终端中使用以下命令进行测试:

$ 1 your text
1: command not found

更正您的版本:

abc="1 hello world"; L=$(echo "$abc"|awk '{print $1}'); echo $L

或者使用更短的版本:

awk '{print $1}' <<< $(echo "1 your text")

例子

% awk '{print $1}' <<< $(echo "1 hello world")
1

% awk '{print $1}' <<< $(echo "mp4 hello world")        
mp4

相关内容