shell操作練習(編寫shell腳本完成統計文件中的每個月份設備的出現次數)

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

發佈了52 篇原創文章 · 獲贊 46 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章