### AWK基本的一些常用用法 #### AWK简介 AWK是一种强大的文本处理工具,它最初是为了方便地处理结构化数据而设计的。AWK语言不仅支持基础的文本处理功能,还提供了高级的数据处理能力,使得它在数据分析、报告生成以及简单的脚本编程方面都非常有用。 #### 命令选项 - `-F`:用于指定输入文件中的字段分隔符。例如,如果文件是以逗号分隔的,可以通过`-F','`来设置。 - `-v`:用于为用户定义的变量赋值。例如,`-v var=value`可以设置一个名为`var`的变量,并将其值设为`value`。 #### 特殊分隔符 - 双引号、引号、竖线(`|`)分隔符、中括号(`[]`)等都可以作为字段分隔符。当使用这些特殊字符时,需要注意转义字符的正确使用。 #### 模式 - **正则表达式**:AWK支持使用正则表达式作为模式。这允许更灵活地匹配文本模式。 - **关系表达式**:可以使用关系运算符(如`>`、`<`)来进行字符串或数值的比较。例如,`$2 > $1`会选择第二字段大于第一字段的行。 - **模式匹配表达式**:使用`~`(匹配)和`!~`(不匹配)来判断字段是否符合某个正则表达式。 #### 记录和域 - **记录**:AWK将每行视为一个记录,默认的记录分隔符为换行符。 - **域**:记录中的各个部分称为域,默认以空白字符(空格或制表符)分隔。 - **记录分隔符**:默认为换行符,可以通过改变内建变量`RS`来自定义。 - **输出记录分隔符**:默认也是换行符,可以通过改变`ORS`来自定义。 #### 匹配操作符(`~`) - `~`操作符用于在记录或域中查找是否匹配某个正则表达式。例如,`$awk '$1 ~ /^root/' test`将显示`test`文件中第一列以`root`开头的所有行。 #### 比较表达式 - AWK支持常见的比较运算符,如`==`、`!=`、`>`、`<`、`>=`、`<=`。这些可以用来比较数值或字符串。 - 示例:`awk '$1 + $2 < 100' test`将输出`test`文件中第一列与第二列之和小于100的所有行。 #### 函数 - **内置数学函数**:如`sqrt()`、`exp()`等。 - **自定义函数**:可以定义自己的函数来执行特定的操作。例如,定义一个函数`GetMax()`来找出两个数字中的最大值: ```awk function GetMax(iNum1, iNum2) { if (iNum1 > iNum2) { return iNum1; } else { return iNum2; } } ``` #### 实例 - 打印所有以模式`no`或`so`开头的行:`awk '/^(no|so)/' test` - 如果记录以`n`或`s`开头,打印这个记录:`awk '/^[ns]/ { print $1 }' test` - 如果第一个域以两个数字结束,打印这个记录:`awk '$1 ~ /[0-9][0-9]$/' test` - 如果第一个域不等于10,打印该行:`awk '$1 != 10' test` #### 多文件操作 - 当需要处理多个文件时,可以使用`FILENAME`变量来区分不同的文件。例如,从多个CSV文件中提取数据并组合起来: ```awk awk -F ',' ' FILENAME == "id_name.csv" { id_name[$1] = $2 } FILENAME == "id_weight.csv" { id_weight[$1] = $2 } FILENAME == "id.csv" { if ($1 in id_name && $1 in id_weight) print $1, id_name[$1], id_weight[$1] }' id_name.csv id_weight.csv id.csv ``` #### 数组访问 - 在AWK中可以轻松地使用数组来存储和检索数据。例如,统计每个字母出现的次数: ```awk echo "abcd" | awk 'BEGIN { iCount = 1 } { for (i = 1; i <= length($0); i++) { letter = substr($0, i, 1); count[letter]++; } } END { for (letter in count) { print letter ": " count[letter]; } }' ``` #### 与Shell之间的交互 - **从AWK传递结果到Shell**:可以通过管道和`eval`命令将AWK的结果传到Shell中使用。例如: ```sh eval $(echo "123" | awk '{printf("str1=%s;str2=%s;str3=%s", $1, $2, $3)}') echo $str1 echo $str2 echo $str3 ``` - **从Shell向AWK传递变量**:可以使用`-v`选项将Shell中的变量传给AWK。例如: ```sh str1="1" str2="2" echo "" | awk -v key1="$str1" -v key2="$str2" '{print key1 * key2, key2 * key2}' ``` 以上是对AWK的一些基本用法和实例的总结,通过这些知识点的学习,可以有效地利用AWK处理各种文本数据和执行复杂的文本分析任务。




























- 粉丝: 13
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 高性能电机控制系统的可编程逻辑器件实现技术.docx
- 国内外主流三维GIS软件比较与应用分析.docx
- 基于HyperMAML算法的轴承小样本故障诊断研究与应用探索.docx
- 基于OBE理念的AI驱动软件工程专业教学改革模式构建.docx
- 基于大模型的腹腔镜胆囊切除术健康教育材料研究.docx
- 基于大数据分析的银行信贷风险管理优化策略.docx
- 基于图卷积自适应处理的水下图像质量提升算法研究.docx
- 基于智能算法的制造车间AGV路径优化与任务协同调度机制分析.docx
- 激光点云数据在单木胸径测量中的应用:最优切片厚度算法研究.docx
- 基于注意力机制的水下光流估算新算法研究.docx
- 教育大数据视野下的教学效果测量研究:评价指标体系构建与应用创新.docx
- 焦炭CSR和CRI性能预测:决策树算法在工业领域的应用.docx
- 精密机床动态误差补偿算法优化与应用.docx
- 企业市场营销模式创新:人工智能的角色与应用探索.docx
- 轻量化YOLOv7算法在钢材表面缺陷检测中的应用研究.docx
- 人工智能赋能的运筹学课程混合式教学模式构建与应用研究.docx


