對於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個設備當前天數出現的次數。