linux awk命令使用实例

1、测试数据

root@PC1:/home/test# ls
test.txt
root@PC1:/home/test# cat test.txt
3 4 2 2
1 9 5 7
5 7 8 4
2 3 4 6

2、实现计算每行的和

root@PC1:/home/test# ls
test.txt
root@PC1:/home/test# cat test.txt
3 4 2 2
1 9 5 7
5 7 8 4
2 3 4 6
root@PC1:/home/test# awk 'BEGIN{sum = 0}{for(i = 1; i <= NF; i++) {sum += $i} {print sum; sum = 0}}' test.txt > sum.txt
root@PC1:/home/test# ls
sum.txt  test.txt
root@PC1:/home/test# cat sum.txt  ## 每行数据的和
11
22
24
15

3、实现计算每行数据的平均数

root@PC1:/home/test# ls
test.txt
root@PC1:/home/test# cat test.txt
3 4 2 2
1 9 5 7
5 7 8 4
2 3 4 6
root@PC1:/home/test# awk 'BEGIN{sum = 0} {for(i = 1; i <= NF; i++) {sum += $i} {print sum/NF; sum = 0}}' test.txt > mean.txt
root@PC1:/home/test# ls
mean.txt  test.txt
root@PC1:/home/test# cat mean.txt  每行数据的平均数
2.75
5.5
6
3.75

4、R实现

dir()
dat <- read.table("test.txt", header = F)
dat
apply(dat, 1, sum)
apply(dat, 1, mean)
> dir()
[1] "test.txt"
> dat <- read.table("test.txt", header = F)  ## 读取测试数据
> dat
  V1 V2 V3 V4
1  3  4  2  2
2  1  9  5  7
3  5  7  8  4
4  2  3  4  6
> apply(dat, 1, sum)   ## 每行的和
[1] 11 22 24 15
> apply(dat, 1, mean)  ## 每行的平均数
[1] 2.75 5.50 6.00 3.75
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
awk 是一种强大的文本处理工具,它可以实现数据的筛选、排序、格式化等功能。本文将介绍 awk 的用法和常用命令。 ## 基本用法 awk 的基本语法为: ``` awk 'pattern {action}' file ``` 其中 pattern 是匹配模式,用来筛选数据;action 是操作,用来处理数据。file 是文件名,如果不指定则默认为标准输入。 例子: 假设有一个文件 data.txt,内容如下: ``` Tom 20 Male Jerry 18 Female Bob 25 Male ``` 要输出文件中所有 Male 的行,可以使用以下命令: ``` awk '/Male/ {print}' data.txt ``` 输出结果为: ``` Tom 20 Male Bob 25 Male ``` 其中 /Male/ 是匹配模式,表示匹配包含 Male 的行;{print} 是操作,表示输出匹配到的行。 ## 变量和操作 awk 中有一些内置变量,可以方便地操作数据。 ### 内置变量 - $0:整个行的内容。 - $1:第一个字段的内容。 - $2:第二个字段的内容。 - ...以此类推。 - NR:当前行号。 - NF:当前行的字段数。 例子: 假设有一个文件 data.txt,内容如下: ``` Tom 20 Male Jerry 18 Female Bob 25 Male ``` 要输出每一行的第一个字段和最后一个字段,可以使用以下命令: ``` awk '{print $1, $NF}' data.txt ``` 输出结果为: ``` Tom Male Jerry Female Bob Male ``` 其中 $1 表示第一个字段,$NF 表示最后一个字段。 ### 操作符 awk 中有一些操作符,可以对数据进行操作。 - ==:相等。 - !=:不相等。 - ~:匹配正则表达式。 - !~:不匹配正则表达式。 - &&:逻辑与。 - ||:逻辑或。 - ?::三元操作符。 例子: 假设有一个文件 data.txt,内容如下: ``` Tom 20 Male Jerry 18 Female Bob 25 Male ``` 要输出所有年龄在 20 到 30 之间的行,可以使用以下命令: ``` awk '$2>=20 && $2<=30 {print}' data.txt ``` 输出结果为: ``` Tom 20 Male Bob 25 Male ``` 其中 $2 表示第二个字段,表示年龄。 ## 函数 awk 中有一些内置函数,可以方便地处理数据。 - length(s):返回字符串 s 的长度。 - substr(s, i, n):返回字符串 s 中从第 i 个字符开始的长度为 n 的子串。 - index(s, t):返回字符串 s 中第一次出现字符串 t 的位置。 - split(s, a, sep):用分隔符 sep 将字符串 s 分隔成数组 a。 - sprintf(fmt, expr...):根据格式 fmt 将表达式 expr... 格式化成字符串。 例子: 假设有一个文件 data.txt,内容如下: ``` Tom 20 Male Jerry 18 Female Bob 25 Male ``` 要输出每个人的名字和年龄,以逗号分隔,可以使用以下命令: ``` awk '{print $1 "," $2}' data.txt ``` 输出结果为: ``` Tom,20 Jerry,18 Bob,25 ``` ## 高级用法 awk 还有一些高级用法,可以实现更复杂的数据处理。 ### 分组统计 假设有一个文件 data.txt,内容如下: ``` Tom 20 Male Jerry 18 Female Bob 25 Male Tom 30 Male Alice 27 Female ``` 要统计 Male 和 Female 的人数,可以使用以下命令: ``` awk '{count[$3]++} END {for(i in count) print i, count[i]}' data.txt ``` 输出结果为: ``` Male 3 Female 2 ``` 其中 count 是一个数组,用来统计 Male 和 Female 的人数。 ### 多文件处理 假设有两个文件 data1.txt 和 data2.txt,内容分别如下: data1.txt: ``` Tom 20 Male Jerry 18 Female Bob 25 Male ``` data2.txt: ``` Tom 30 Male Alice 27 Female ``` 要将两个文件合并,并输出所有 Male 的行,可以使用以下命令: ``` awk '/Male/ {print}' data1.txt data2.txt ``` 输出结果为: ``` Tom 20 Male Bob 25 Male Tom 30 Male ``` 其中 data1.txt 和 data2.txt 都被作为输入文件处理。 ## 总结 awk 是一种强大的文本处理工具,可以实现数据的筛选、排序、格式化等功能。本文介绍了 awk 的基本用法和常用命令,以及一些高级用法。熟练掌握 awk,可以提高文本处理的效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值