Sre*_*yan 3 command-line parameter awk variable-substitution
我写了一个非常简单的 awk 脚本,它反转文件的每个单词——:
awk '
{
for (i=1;i<=NF;i++)
{ x=""
for(j=length($i);j>0;j--)
x=x substr($0,j,1);
print x
}}' file1
Run Code Online (Sandbox Code Playgroud)
file1的内容如下-:
hello
Run Code Online (Sandbox Code Playgroud)
现在让我感到困惑的是,当我更换 - 时:
print x
Run Code Online (Sandbox Code Playgroud)
和
print $x
Run Code Online (Sandbox Code Playgroud)
我得到了记录的输出,即。我打招呼,而不是olleh的反向输出。
为什么使用 $x 给我 $0 的内容?变量如何在 awk 中工作?它真的很混乱。当我想使用 $x 而只使用 x 时,是否有固定规则?
x
是你的 awk 变量,$x
是不同的东西......
$0
对应于刚刚读取的行的输入字符串内容,而$1
...$n
对应于$0
使用默认分隔符的内容细分字段。
awk 允许您使用变量以编程方式访问字段,即,如果变量MyValue
包含5
,$MyValue
则与$5
.
这里发生的情况是您的变量x
确实包含olleh
字符串,该字符串在数字上被解释为0
. 在 awk 中,所有以非数字值开头的字符串在用作数值时都被解释为0
,例如,5*"test"
评估为0
因为"test"
解释为0
)。因此,在您的情况下,$x
与 相同$0
,即提供的输入字符串,即hello
.