说明:利用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= file∣awk−F","−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
输出结果:
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