代码之家  ›  专栏  ›  技术社区  ›  JCAvila2

我需要了解awk Linux命令的帮助

  •  0
  • JCAvila2  · 技术社区  · 4 年前

    什么 awk -F: '!($3 < 512 && $4 < 30)' /etc/passwd 你喜欢Linux吗?我只发现awk是一种脚本语言,但无法理解这一切。

    1 回复  |  直到 4 年前
        1
  •  0
  •   George Vasiliou    4 年前

    这个 awk 世界是以模式为基础的 condition{action} 这适用于输入文件的每个输入记录/输入行。

    如果 {action} 缺少已执行的默认操作= print 这实际上意味着 print $0
    如果 (condition) 缺少默认条件 true 使用

    -F: 将字段分隔符调整为 : 而不是 [[space]] 这是awk的默认字段分隔符。awk中的字段分隔符几乎可以是任何内容,包括正则表达式和逻辑(即or)表达式。

    $3 , $4 输入行的第三和第四个字段(由 : (在代码中)

    ($3 < 512 && $4 < 30) 是一种条件, && 是接线员。

    ! 前面的条件只是一个NOT运算符,用于反转 (条件)

    更有趣的awk选项:

    $0 :是否从文件中读取整个输入行,而不是拆分
    $NF :是输入行的最后一个字段
    NF :是字段数
    RS :输入记录/行分隔符可以调整为 \n (awk的违约)
    ORS :输出记录分隔符(awk的默认值为 \n )
    尝试: echo "one two three" | awk '{print $2}'
    echo "one two three" |awk '1' RS=" " ORS="\n"

    还有更多关于 可以在 man awk info awk 或在官方awk文件中,即 https://www.gnu.org/software/gawk/manual/gawk.html 对于 gnu awk - gawk

        2
  •  0
  •   that other guy    4 年前

    这是

    awk -F: '!($3 < 512 && $4 < 30) { print; }' /etc/passwd
    

    意思是“在没有显示的地方显示所有行”( : -分隔字段#3小于512,字段#4小于30 /etc/passwd

    借助于 man 5 passwd 和DeMorgan定律,这对应于“显示用户id大于512或组id大于30的用户帐户列表”。

    这种逻辑可能只用于显示系统上的人类用户,因为一种常见的约定是,与非人类的系统用户(如apache和mysql)相比,为他们分配更高的UID。