我想使用ls -l file_path | cut -d' ' -f 1在awk脚本中。我需要文件的权限,而不是用它作为数组的索引。我怎么能这样做? 例如:如果命令的输出是这样的:-rw-rw-r-- 我希望能够做到这样的事情:Array [-rw-rw-r - ] ++ 我试着这样做:
awk '{ system("ls -l " FILENAME "|cut -d ' ' -f 1") }' `find $1 -type f`
获得权利,但它不起作用。
答案 0 :(得分:2)
你不会编写类似的代码,因为它试图将awk用作shell。这就像你坐在反铲上时用螺丝刀挖洞一样。相反,你会用GNU工具写这样的东西:
find "$1" -type f -print0 | xargs -0 stat -c %A | awk '{arr[$0]++}'
甚至:
find "." -type f -printf '%M\n' | awk '{arr[$0]++}'
感谢@CharlesDuffy在评论中提供错误修复和灵感。
答案 1 :(得分:1)
而不是使用ls
并解析它的输出使用stat
与getline
:
awk '{cmd="stat -c %A " FILENAME; cmd | getline perm; close(cmd); arr[perm]++}'