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 " , " − v c f g = file | awk -F "," -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 {
for(j=0; 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

linux awk使用实例_第1张图片

输出结果:
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

你可能感兴趣的:(linux,shell)