【问题标题】:AWK string conditional not workingAWK 字符串条件不起作用
【发布时间】:2016-03-09 22:36:29
【问题描述】:

我正在尝试遍历一个目录并确保它不是任何文件的所有者的根目录。使用 awk,我遇到了一个问题,即将字段与字符串进行比较不会产生准确的结果。

ls -d -l /path/to/file/**/* | awk '{ if ( "$3" == "root" ); print "File has wrong permissions: " $9;}'

生成的是文件列表,当仔细检查时,其所有者和组都不是root。

-rw-rw-r-- 1 foobar foobar 78828 Dec 4 11:15 /p/t/f/xyz/abc.jpg

理想情况下,最终结果应该是这样的:

ls -d -l /path/to/file/**/* | awk '{ if ("$3" != "deploy" || "$4" != "deploy") [...]

怎么了?

谢谢。

【问题讨论】:

  • awk 不像 shell:用 $3 != "deploy" 替换 "$3" != "deploy"

标签: bash unix awk sh


【解决方案1】:

您不想将$3 放在引号中。如果你这样做,它就会变成一个字符串。此外,您不希望在 if 条件之后使用分号 - 如果您有分号,那么 if 什么也不做。您可能想要进行这两项更改:

ls -d -l /path/to/file/**/* | awk '{ if ( $3 == "root" ) print "File has wrong permissions: " $9;}'

【讨论】:

    【解决方案2】:

    您语句中的问题是 if 条件后的 ;。这意味着 if 块是空的。
    删除; 或更好地将if 块放入{...} 中,一切都会如您所愿。此外,您不应将字段放在"..." ("$3" -> $3)

    ls -d -l / | awk '{ if ( $3 == "root" ) print "File has wrong permissions: "$9;}'
    

    ls -d -l / | awk '{ if ( $3 == "root" ){print "File has wrong permissions: " $9}}'
    

    【讨论】:

    • 我知道必须是小东西。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多