对于shell的操作一直不太熟,最近在做一个比赛,恰好用到了shell来处理一些数据,下面总结下shell的一些基本用法,并练习编写shell脚本完成统计文件中的每个月份设备的出现次数
首先有5个数据文件要做处理
数据格式如图
先练习将5个数据文件中的第2列和第3,4列提取出来(这里提一下shell中的数字和字符串互相转换的过程,数字默认可以进行字符串操作,字符串转数字有以下几种方法
例如:a="024"
1,用${{a}}
2,用let达到(()) 运算效果。
let num=0123;
echo $num;
83
3,双括号运算符:
a=$((1+2));
echo $a;
等同于:
a=`expr 1 + 2`
而数字会默认做字符串处理
变量用单引号''变字符串
i=1
echo '$i';
输出:$1
)然后开始正式的操作
#!/bin/bash
fileFront=data_2015_;
index=1;
fileBehind=.txt;
num1=0;
num2=0;
num3=0;
num4=0;
num5=0;
num6=0;
num7=0;
num8=0;
num9=0;
num10=0;
num11=0;
num12=0;
num13=0;
num14=0;
num15=0;
tempDate=$(sed "1p" -n data_2015_1.txt|awk '{print $3}');
tempflavorName=$(sed "${i}p" -n data_2015_1.txt|awk '{print $2}');
for((index=1;index<=5;index++))
do
fileName=${fileFront}${index}${fileBehind};
echo $fileName;
line=`cat $fileName|wc -l`;
echo $line;
for((i=1;i<$line;i++))
do
flavorName=$(sed "${i}p" -n $fileName|awk '{print $2}');
Date=$(sed "${i}p" -n $fileName|awk '{print $3}');
#time=$(sed "${i}p" -n $fileName|awk '{print $4}');
echo $flavorName;
if [ "$Date" == "$tempDate" ]; then
case $flavorName in
"flavor1")
num1=$(($num1+1))
;;
"flavor2")
num2=$(($num2+1))
;;
"flavor3")
num3=$(($num3+1))
;;
"flavor4")
num4=$(($num4+1))
;;
"flavor5")
num5=$(($num5+1))
;;
"flavor6")
num6=$(($num6+1))
;;
"flavor7")
num7=$(($num7+1))
;;
"flavor8")
num8=$(($num8+1))
;;
"flavor9")
num9=$(($num9+1))
;;
"flavor10")
num10=$(($num10+1))
;;
"flavor11")
num11=$(($num11+1))
echo $num2;
;;
"flavor12")
num12=$(($num12+1))
;;
"flavor13")
num13=$(($num13+1))
;;
"flavor14")
num14=$(($num14+1))
;;
"flavor15")
num15=$(($num15+1))
;;
esac
else
echo "$tempDate $num1 $num2 $num3 $num4 $num5 $num6 $num7 $num8 $num9 $num10 $num11 $num12 $num13 $num14 $num15" >> dataProFile;
tempDate=$Date;
i=$(($i-1));
echo $i;
num1=0;
num2=0;
num3=0;
num4=0;
num5=0;
num6=0;
num7=0;
num8=0;
num9=0;
num10=0;
num11=0;
num12=0;
num13=0;
num14=0;
num15=0;
fi
done
done
我们来看下效果
第一列是时间,第i列是第i个设备当前天数出现的次数。