From be83c6b9a2bfda9b322057e13631d6d2f9e8deb1 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 4 Jun 2024 15:59:00 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20240603-awk\347\224\250\346\263\225.md" | 118 ++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 "\351\231\266\345\256\227\350\261\252/\347\254\224\350\256\260/20240603-awk\347\224\250\346\263\225.md" diff --git "a/\351\231\266\345\256\227\350\261\252/\347\254\224\350\256\260/20240603-awk\347\224\250\346\263\225.md" "b/\351\231\266\345\256\227\350\261\252/\347\254\224\350\256\260/20240603-awk\347\224\250\346\263\225.md" new file mode 100644 index 0000000..1cd48bd --- /dev/null +++ "b/\351\231\266\345\256\227\350\261\252/\347\254\224\350\256\260/20240603-awk\347\224\250\346\263\225.md" @@ -0,0 +1,118 @@ +# AWK用法 + +#### awk 是一个强大的文本处理工具,适用于在 Linux 和类 Unix 系统上处理结构化文本数据。它特别适合处理按列组织的文本文件 + +### 基本语法 + +```JS +awk 'pattern { action }' file +``` + +- pattern:可选,指定文本行的匹配模式。 +- action:对匹配的文本行执行的操作。 +- file:要处理的文件。 + +## 选项 + +- F:指定输入字段分隔符。 +- v:定义变量。 +- f:从脚本文件读取 awk 程序 + +### 内置变量 + +- sNF:当前记录的字段数。 +- sNR:当前记录的行号。 +- sFS:输入字段分隔符。 +- sOFS:输出字段分隔符。 +- sRS:输入记录分隔符。 +- sORS:输出记录分隔符。 +- s$0:当前记录(整行)。 +- s$n:当前记录的第 n 个字段。 + +### 打印文件内容 + +```js +awk '{ print }' example.txt +``` + +### 打印特定字段 + +##### 假设 example.txt 内容如下 + +```sh +Alice 30 +Bob 25 +Charlie 35 + +``` + +打印第一列(名字): + +```js +awk '{ print $1 }' example.txt +``` + +### 条件匹配 + +##### 打印年龄大于 30 的行 + +```sh +awk '$2 > 30 { print }' example.txt +``` + +##### 打印名字为 "Bob" 的行 + +```js +awk '$1 == "Bob" { print }' example.tx +``` + +### 使用字段分隔符 + +```sh +awk -F, '{ print $1, $2 }' data.csv +``` + +##### 打印每行的字段数和内容 + +```sh +awk '{ print NF, $0 }' example.txt +``` + +## 使用操作符 + +- +:加 +- -:减 +- *:乘 +- /:除 +- %:取模 +- ^:幂 + +##### 计算每行第二列的平方 + +```JS +awk '{ print $2^2 }' example.txt +``` + +## 开始语句包和结束语句包 + +### 开始语句(BEGIN) + +##### BEGIN 语句块在 awk 开始处理输入文件之前执行。它通常用于初始化变量、设置字段分隔符和其他预处理任务 + +```js +awk 'BEGIN { actions }' file +``` + +### 结束语句块(END) + +##### END 语句块在 awk 完成对所有输入文件的处理后执行。它通常用于打印总结信息或执行清理工作 + +```js +awk '{ actions } END { actions }' file +``` + +#### 开始语句、中间、结束语句 + +```js +awk 'BEGIN {print "姓名"} {sum += $3} {print} END {print "思政成绩", sum}' fenshu.txt +``` -- Gitee