字符串标记 ^ 的开头在 awk 脚本中被忽略吗?

字符串标记 ^ 的开头在 awk 脚本中被忽略吗?

为了学习目的,我编写了一个非常简单的awk脚本。
它应该找到里面一些二进制文件的名称和大小/usr/bin

以下是脚本的示例:

#!/usr/bin/awk -f

func round(n) {
  return int(n + 0.5)
}


BEGIN { FS=" " }
/^x.+gcc/ && $5 > 30000 { print $9, $5, round($5/1024)"K" }
END { print "Done!" }

但当我运行它时没有结果:

~/tmp$ ls -lL /usr/bin | ./test.awk
Done!

我确信这是字符串标记的开始,^因为如果我替换

/^x86.+gcc/ && $5 > 30000 { print $9, $5, round($5/1024)"K" }

经过

/.+gcc/ && $5 > 30000 { print $9, $5, round($5/1024)"K" }

结果是:

~/tmp$ ls -lL /usr/bin | ./test.awk
gcc 1154192 1127K
gcc-9 1154192 1127K
gcc-ar 35464 35K
gcc-ar-9 35464 35K
gcc-nm 35464 35K
gcc-nm-9 35464 35K
gcc-ranlib 35464 35K
gcc-ranlib-9 35464 35K
x86_64-linux-gnu-gcc 1154192 1127K
x86_64-linux-gnu-gcc-9 1154192 1127K
x86_64-linux-gnu-gcc-ar 35464 35K
x86_64-linux-gnu-gcc-ar-9 35464 35K
x86_64-linux-gnu-gcc-nm 35464 35K
x86_64-linux-gnu-gcc-nm-9 35464 35K
x86_64-linux-gnu-gcc-ranlib 35464 35K
x86_64-linux-gnu-gcc-ranlib-9 35464 35K
Done!

这显然向我展示了比我想要的更多的结果。

为什么awk会这样?

答案1

为什么awk会这样?

因为/^x86.+gcc/测试的是整行输入,而不是第 9 个输入字段,也不是未来的输出(反正当时是未知的)。 生成的行不以ls -lL /usr/bin开头x86

边注:不解析输出ls

相关内容