diff --git "a/\351\231\210\345\277\227\344\274\237/20240603 awk.md" "b/\351\231\210\345\277\227\344\274\237/20240603 awk.md" new file mode 100644 index 0000000000000000000000000000000000000000..ab5ea2a8472ab85c93d04888aa0ca7c29690ca12 --- /dev/null +++ "b/\351\231\210\345\277\227\344\274\237/20240603 awk.md" @@ -0,0 +1,96 @@ +# AWK + +文本处理的工具,也是一种编程语言。 + +## 命令结构 + +awk [选项] '脚本' 文件 + +脚本: + +开始语句块:在程序开始时执行 BEGIN + +通用语句块:逐行处理文件内容 pattern + +结束语句块:在程序结束时执行 END + +例如:头尾各加一行 + +awk 'BEGIN { print "我是开头"} { print } END { print "我是结尾" } ' student_scores.csv + +## 语句块 + +由模式 (pattern) 和动作 (action) 构成。 + +- 如果没有指定模式,则对每一行都执行动作。 +- 指定模式后,只有匹配模式的行,才执行动作,即满足条件才执行 + +例如:打印文件中所有包含 王 的行 + +awk '/王/ { print $0 }' student_scores.csv + +BEGIN { print "----开始-----" }:在处理文件开始时打印“----开始-----”。 + +$2 >= 80 { print }:对于每一行,如果第二个字段(数学成绩)大于或等于80,则打印该行。 + +END { print "----结束-----" }:在处理文件结束时打印“----结束-----”。 + +## 选项 + +-F + +指定输入字段分隔符。例如,`-F,` 将逗号设置为字段分隔符。 + +默认是以空格\t等为分隔符 + +类似于FS="分隔符" 在文件中使用 + +-v + +赋值外部变量。例如,`-v var=value`。 min=60 + +-f + +指定 Awk 脚本文件。 + +## 常用模式 + +### 正则表达式 + +/ / 内的 + +### 比较运算符 + +- `==`(等于) +- `!=`(不等于) +- `<`(小于) +- `<=`(小于等于) +- `>`(大于) +- `>=`(大于等于) + +### 逻辑运算符 + +- `&&`:逻辑与(AND) +- `||`:逻辑或(OR) +- `!`:逻辑非(NOT) + +### 三元运算符 + +条件运算符 `? :` + +## 常用动作 + +`print`:打印指定内容。 + +`printf`:格式化输出。 + +## 特殊变量 + +- `NR`:表示记录的数量(当前行号) +- `NF`:表示当前行的字段数量。`$NF`表示最后一列 +- `$0`:包含当前行的文本内容,即一整行内容。 +- `$1`、`$2`:表示当前行的第1个、第2个字段的内容,以次类推。 +- `FS`:输入时的域分割符。效果同-F选项 +- `OFS`:输出时的域分割符。 + +1. awk -F: '$3>=100 {print $0}' /etc/passwd \ No newline at end of file