首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要帮助理解awk Linux命令

我需要帮助理解awk Linux命令
EN

Stack Overflow用户
提问于 2022-04-27 00:26:00
回答 2查看 57关注 0票数 -3

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-27 01:17:31

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

如果{action}缺失,则执行默认操作= print,这实际上意味着print $0

如果(condition)缺少默认条件,则使用true

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

$3$4输入行的第3和第4字段(代码中由:分隔)

($3 < 512 && $4 < 30)是一个条件,&&是和运算符。

条件前面的!只是一个NOT操作符,用来反转(condition)的逻辑。

awk的更有趣的选择:

$0:是从文件读取的整个输入行,而不是拆分的

$NF:是输入行的最后一个字段

NF:是字段的数目

RS:输入记录/行分隔符可以调整为不为\n (awk的默认设置)

ORS:输出记录分隔符(默认为\n)

尝试:echo "one two three" | awk '{print $2}'

echo "one two three" |awk '1' RS=" " ORS="\n"

关于awk的更多信息可以在man awkinfo awk或官方awk文档中找到,比如https://www.gnu.org/software/gawk/manual/gawk.html for gnu awk - gawk

票数 0
EN

Stack Overflow用户

发布于 2022-04-27 00:36:09

这是缩写

代码语言:javascript
复制
awk -F: '!($3 < 512 && $4 < 30) { print; }' /etc/passwd

的意思是“显示所有不在的行(:-separated字段#3小于512,字段4小于30)”。

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

这个逻辑很可能只显示系统上的人工用户,因为一个常见的约定是给他们分配比apache和mysql这样的非人类用户更高的UID。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72021950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档