linux awk使用实例

说明:利用awk实现类似于数据库group by功能;

文本如下:
#学号 科目 成绩
1 chinese 90
1 math 40
1 EngLish 59
2 chinese 95
2 math 80
2 EngLish 52
3 chinese 89
4 math 29

(1)按照学号统计每个学号的总成绩
cat file.txt | grep -v “#” | awk ‘{H[$1]+=$3}END{for (i in H){printf("%s,%d\n",i,H[i])}}’ | sort
统计结果:
1,189
2,227
3,89
4,29

(2)捞取文件中指定科目的总成绩
sub.cfg–
chinese
math

cat file.txt | awk -v cfg=sub.cfg 'BEGIN{
		#此处从sub.cfg配置文件中读取数据,构建hash
		while(getline val < sub.cfg)
		{
			H[val]=sprintf("OK");
		} 
	}
	{
		#读取当前file.txt文件,
		if(H[$2]=="OK")
			S[$2]+=$3;
	}END{
		for(i in S)
		{
			printf("%s,%d\n",i,S[i]);
		}
	}'
统计结果:
	chinese,274
	math,149

#!/bin/sh

file=$1
cfgfile=$2
timecfg="./time_dict.cfg"

flag=echo $file | awk -F "_" '{print $1}'
cat f i l e ∣ a w k − F &quot; , &quot; − v c f g = file | awk -F &quot;,&quot; -v cfg= fileawkF","vcfg=cfgfile -v tim=$timecfg 'BEGIN{
tnum=0;
anum=0;
while(getline t < tim)
{
T[tnum]=t;
tnum++;
}
while(getline add < cfg)
{
A[anum]=add;
anum++;
}
for(i=0; i<tnum; ++i)
{
for(j=0; j<anum; ++j)
{
key=sprintf("%s,%s",T[i],A[j]);
K[key]=0;
L[key]=T[i];
M[key]=A[j];
}
}
}
{
tmpkey=sprintf("%s,%s",$1,$3);
if(K[tmpkey] == 0)
{
K[tmpkey] = 1;
}
print KaTeX parse error: Expected 'EOF', got '}' at position 5: 0 }̲END{ for(k i…{flag}_2.csv

awk实现排序
file:4.txt
110,4|1,16
110,5|1,12
110,6|1,11
110,2|1,103
110,1|1,10
110,1|2,101
110,3|1,103
112,3|1,103
112,4|1,16
112,6|1,11
112,5|1,12
112,1|1,10
112,1|2,101
112,2|1,103
113,1|1,30
104,2|1,34

在这里插入图片描述

输出结果:
110,4|1,16
110,5|1,12
110,6|1,11
110,2|1,103
110,1|1,10
110,1|2,101
110,3|1,103
112,3|1,103
112,4|1,16
112,6|1,11
112,5|1,12
112,1|1,10
112,1|2,101
112,2|1,103
113,1|1,30
104,2|1,34

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值