shell脚本实现相关文本和文件夹操作

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

经测试,成功运行.

猜你喜欢

转载自blog.csdn.net/qq_34538534/article/details/83097605