如何在Shell文件中使用Awk的$0变量

3

1. 我的 shell 文件是

 [root@node3 script]# cat hi.sh
 #!/bin/bash
 strings="sdsf sdsda sdsadx"
 echo `awk "{print substr($0,0,9)}"<<<$strings`

2.exe是我的shell文件

[root@node3 script]# sh hi.sh 

awk: {print substr(hi.sh,0,9)}

awk:                 ^ syntax error

awk: 致命错误: 0 是 substr 的无效参数个数

那么如何在shell文件中使用awk的$0?

$0是默认文件名。

另一个问题,我想在awk中使用变量$0,但是shell文件中还有另一个$variable,我该怎么办?

$ cat hi.sh 
#!/bin/bash 
strings="sdsf sdsda sdsadx" 
num=9 
echo \`awk '{print substr($0,0,$num)}' <<< $strings\`

你想要什么样的结果? - RomanPerekhrest
@RomanPerekhrest 我已经得到了答案,无论如何还是谢谢你。 - here
对于第二个问题,请勿在此处放置它。请查看此问题。如果仍然无法解决,请提出不同的问题。 - Utsav
“echo $(foo)” 是无意义的,直接使用 “foo” 即可。 - chepner
1个回答

2
您的脚本问题在于awk中使用了双引号,请将其替换为单引号。如果使用双引号,则其中的$0被视为脚本的第一个参数,而在本例中它是脚本名称hi.sh。如果使用单引号,则可以将$0用作awk参数以显示整个行。此外,此处不需要echo,您只需使用awk '{print substr($0,0,9)}' <<< $strings即可。
$ cat hi.sh
#!/bin/bash
strings="sdsf sdsda sdsadx"
#echo `awk '{print substr($0,0,9)}' <<< $strings` --echo not needed
awk '{print substr($0,0,9)}' <<< $strings
$
$ sh hi.sh
sdsf sdsd

1
我进行了替换,现在它可以工作了。谢谢你。另外,你的网页上的代码仍然显示双引号。 - here
好的,问题已解决。 - Utsav
是的,我在回答中也提到了。我只是想指出OP查询中的错误,因此保留了其余代码。 - Utsav
awk 中有一个选项可以在外部定义变量,例如 awk var=$num .... 然后在 awk 内部可以使用 $var。不确定命令的确切用法,最好进行谷歌搜索 :) - Utsav
我知道你在说什么。使用awk的变量来解决它。 - here

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接