shell指令碼實現相關文字和資料夾操作
阿新 • • 發佈:2018-11-10
shell指令碼實現某些文字/檔案和資料夾功能.
資料在指令碼的上層資料夾Data內,在scripts資料夾內執行該指令碼,按格式得到需要的event.cat檔案.
在此做一記錄, 以便以後檢視.
#!/bin/bash #以要求格式生成event.cat #在資料檔案上一級目錄的srcipts檔案內執行 eventid=(`cut -d' ' -f1 iddir.dat`) #獲取iddir.dat的第一列,地震id,寫入eventid陣列; echo ${eventid[@]} evdir=(`cut -d' ' -f2 iddir.dat`) #獲取iddir.dat的第二列,地震事件目錄名,寫入evdir陣列; echo ${evdir[@]} length=${#evdir[@]} #獲取陣列長度 echo "$length" cd ../Data for file in ./* #遍歷該檔案Data下所有資料夾 do cd ./$file path=$PWD ls >$file.dat #將檔案中的所有檔案寫入$file.dat sed -i '1d' ./$file.dat #刪除$file.txt最後一行 echo "$path" echo "$file" filename=`echo $file | cut -d \/ -f 2` #將字串$file以/分割,取第2部分(檔名),賦值給filename. echo "$filename" #將絕對路徑加到路徑裡,得到$file.dat3 filenm=($(awk '{print $0}' $file.dat)) length2=${#filenm[@]} for((i=0;i < length2;i++)) do filename2=`echo ${filenm[i]} | cut -d \/ -f 2` echo "$path""/""$filename2" >> $file.dat3 done for((i=0;i < length;i++)) do if [[ ${evdir[i]} = $filename ]] #為該資料夾的地震事件尋找匹配的地震ID,賦值給evid. then evid=${eventid[i]} echo "$evid" fi done evlist=($(awk '{print $0}' $file.dat3)) length1=${#evlist[@]} #將地震ID寫入evid.txt for(( i=0;i<length1-1;i=i+3)) do echo "$evid">>evid.dat done #將$file.dat3每 3行寫成一行,寫入$file.dat1 for(( i=0;i<length1-1;i=i+3)) do echo "${evlist[i]} ${evlist[i+1]} ${evlist[i+2]}" >> $file.dat1 done #將臺站名寫入$file.dat2檔案行首 awk -F"." '{print $8,$0}' $file.dat1>$file.dat2 echo "evid: $evid" #將事件ID寫入$file.dat2檔案第1行和第2行中間 awk '{a="NULL";getline a<"evid.dat";print $1,a,$2,$3,$4}' $file.dat2 >$file.txt #cp $file* ../ cp *.txt ../../scripts/ rm $file.* rm *.dat #rm *.txt cd .. #返回上級資料夾-Data資料夾 done #將幾個.txt檔案合併為一個檔案event.cat cd ../scripts cat *.txt>>event.cat rm *.txt
經測試,成功執行.