【Linux】awk处理变量

博客指出使用awk多数场景是处理文件,但也会用于处理变量,且介绍了awk有两种方式可实现对变量的处理。

我们在使用awk的大部分场景,是对文件的处理,但有时也会用它对变量进行处理。awk有两种方式可以实现对变量的处理:

(1)

[oracle@master test]$ cat test.sh
#!/bin/bash
a='abc,123'
a1=`echo "$a" | awk -F "," '{print $1}'`
a2=`echo "$a" | awk -F "," '{print $2}'`
echo '拆分后第一部分:'$a1
echo '拆分后第二部分:'$a2
[oracle@master test]$ sh test.sh 
拆分后第一部分:abc
拆分后第二部分:123

(2)

[oracle@master test]$ cat test.sh 
#!/bin/bash
a='abc,123'
a1=`awk -F "," '{print $1}'<<<"$a"`
a2=`awk -F "," '{print $2}'<<<"$a"`
echo '拆分后第一部分:'$a1
echo '拆分后第二部分:'$a2
[oracle@master test]$ sh test.sh 
拆分后第一部分:abc
拆分后第二部分:123

 

### 使用 `awk` 处理数组 #### 示例 1:初始化并打印数组元素 在 `awk` 脚本中可以直接定义和操作数组。下面的例子展示了如何创建一个简单的字符串变量,并尝试对其进行自增运算,这虽然不是严格意义上的数组操作,但有助于理解 `awk` 的基本数据处理方式。 ```bash $ awk 'BEGIN{a="test"; print a; a++ ; print a}' ``` 此命令先将字符串 `"test"` 赋给变量 `a` 并输出它;接着试图对这个非数值型的变量执行加法操作,在某些版本下可能会得到不同的结果或警告信息[^3]。 #### 示例 2:统计日志文件中的 HTTP 状态码频率 更实用的一个例子是从 Web 服务器访问日志 (`access.log`) 文件中提取所有的 HTTP 响应状态码,并计算每种状态码出现的次数: ```bash awk '{code[$9]++} END {for(i in code){print i,code[i],"次"}}' access.log ``` 这里 `$9` 表示每一行第九列的内容通常对应于HTTP响应的状态码位置(具体取决于日志格式)。通过遍历整个日志文件,每当遇到一个新的状态码就将其作为键存入名为 `code` 的关联数组中,并增加相应的计数器值。最后,在所有记录都被读取完毕之后,利用 `END` 关键字指定的动作块来迭代显示每一个唯一的状态码及其对应的频度[^5]。 #### AWK 数组基础语法解释 - **声明与赋值**: 不需要显式声明数组类型,只需按照索引来设置元素即可。 ```awk array[index]="value" ``` - **多维模拟**: 可以使用分隔符连接多个维度形成复合键 ```awk twoDArray[x","y]=z; split(twoDArray[x","y], temp,","); ``` - **删除元素** ```awk delete array[element]; ``` - **遍历数组** 对于关联数组来说,可以通过 `in` 运算符配合 `for` 循环来进行遍历: ```awk for (key in array){ print key,array[key] } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值