diff --git "a/15 \351\273\204\350\257\227\351\276\231/20240603\345\210\235\350\257\206awk.md" "b/15 \351\273\204\350\257\227\351\276\231/20240603\345\210\235\350\257\206awk.md" new file mode 100644 index 0000000000000000000000000000000000000000..71affab8d98bf4d7ae65d36d32a80720f6ede9aa --- /dev/null +++ "b/15 \351\273\204\350\257\227\351\276\231/20240603\345\210\235\350\257\206awk.md" @@ -0,0 +1,141 @@ +# 1.笔记 + +#### 基本结构 + +```bash +awk [选项] '脚本' 文件 + +开始语句块 BEGIN { print "start" } + +通用语句块 pattern { commands } + +结束语句块 END { print "end" } +``` + + + +##### 常用选项 + +```bash +-F:指定输入字段分隔符 + +默认是以空格 ' \t ' 等为分隔符 + +类似于FS="分隔符" 在文件中使用 + +-v:赋值外部变量 + +-f:指定 awk 脚本文件 + +-W:控制警告和其他运行时选项 +``` + + + +##### 匹配正则表达式 + +```bash +~ /内容/ :包含 + +!~ /内容/ :不包含 +``` + + + +##### 比较运算符 + +```bash +== 等于 + +!= 不等于 + +< 小于 + +<= 小于等于 + +'>' 大于 + +'>=' 大于等 +``` + + + +##### 逻辑运算符 + +```bash +&& 和 + +|| 或 + +! 不 +``` + + + +### 三元运算符( ? :) + +```bash +NR 行数量 + +NF 列数量 + +$0 整行内容 + +$N 当前行的第N个 + +FS 输入时域分割符 + +OFS 输出时域分割符 +``` + + + +# 2.作业 + +1. 只显示/etc/passwd的账户 + +```bash +lmd@hecs-288852:~$ awk -F: '{print $1}' /etc/passwd +``` + +1. 只显示/etc/passwd的账户和对应的shell,并在第一行上添加列名用户制表符shell,最后一行添加---------------- + +```bash +lmd@hecs-288852:~$ awk -F: 'BEGIN {print "用户名\tshell"} {print $1,$7} END {print "......"}' /etc/passwd +``` + +1. 搜索/etc/passwd有关键字root的所有行 + +```bash +lmd@hecs-288852:~$ awk -F: '/root/ {print}' /etc/passwd +``` + +1. 统计/etc/passwd文件中,每行的行号,每列的列数,对应的完整行内容以制表符分隔 + +```bash +lmd@hecs-288852:~$ awk -F: '{OFS="\t";print NR,NF,$0}' /etc/passwd +``` + +1. 输出/etc/passwd文件中以nologin结尾的行 + +```bash +lmd@hecs-288852:~$ awk -F: '$NF~/nologin/ {print $0}' /etc/passwd +``` + +1. 输出/etc/passwd文件中uid字段小于100的行 + +```bash +lmd@hecs-288852:~$ awk -F: '$3<100 {print $0}' /etc/passwd +``` + +1. /etc/passwd文件中gid字段大于200的,输出该行第一、第四字段,第一,第四字段并以制表符分隔 + +```bash +lmd@hecs-288852:~$ awk -F: '$4>200 {print $1,$4}' /etc/passwd +``` + +1. 输出/etc/passwd文件中uid字段大于等于100的行 + +```bash +lmd@hecs-288852:~$ awk -F: '$3>=100 {print $0}' /etc/passwd +``` \ No newline at end of file