为了学习目的,我编写了一个非常简单的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
。