代码语言:shell复制
#!/bin/bash
sudo chmod 777 ./ ; sudo chmod 777 -R ./*
#shellDir=`pwd`
shellDir="/datadisk/workIng/DongRuan/xuexi/EB_Mcal/文档/shell"
PdfDir="$shellDir/../PDF"
CacheDir=$shellDir/../txt/
GtmTxtDir="$CacheDir/GTM/GtmToAdcDir/source"
AdcTxtDir="$CacheDir/GTM/GtmToAdcDir/AdcDir"
PdfFile=Infineon-AURIX_TC39x-UserManual-v01_00-EN.pdf
PDFtoTxtFile=$PdfDir/Infineon-AURIX_TC39x-UserManual-v01_00-EN.pdf.txt
catNR()
{
if [[ ! -f $PdfDir/$PdfFile || ! -d $PdfDir ]]
then
echo "请将文件 $PdfFile 放置于脚本同路径下的 PDF 文件夹 "
sudo mkdir -p $PdfDir # 自动递归创建 子目录
exit
fi
# 检查文件是否存在
if [ ! -f "$PDFtoTxtFile" ]; then
echo "[runing] 正在将pdf 文件转换为 txt 文件: $PDFtoTxtFile "
sudo apt install -y poppler-utils
pdftotext -layout $PdfDir/$PdfFile $PDFtoTxtFile # 保留原换行格式 进行转换
# pdftotext $PdfDir/$PdfFile $PDFtoTxtFile # 不保留原换行 格式转换
fi
echo "处理文件: $PDFtoTxtFile"
Nrlist=(`cat -n $PDFtoTxtFile | grep "GTM_ADCTRIGiOUT" | awk -F" " '{print $1}'`)
NameList=(`cat -n $PDFtoTxtFile | grep "GTM_ADCTRIGiOUT" | awk -F" " '{print $2 $3}' | sed 's/[{}<>()=]/_/g' `)
NrFinally=(`cat -n $PDFtoTxtFile | grep "GTM to CAN/TTCAN Connections" | grep -vE "26-366|Overview" | awk -F" " '{print $1}'`)
}
CatGrep()
{
# 检查文件是否存在
if [ ! -f "$PDFtoTxtFile" ]; then
echo "文件不存在: $PDFtoTxtFile"
exit 1
fi
awk -v ReadHNR="$ReadHNR" -v ReadLNR="$ReadLNR" -v line_number="$FindNr" 'NR == line_number || (NR > line_number - ReadHNR && NR < line_number ReadLNR)' "$PDFtoTxtFile" |
grep -vwE '^[0-9]|^[0-9][0-9]' | sed "/^$/d "
}
CatFile()
{
FileCacheList=(`ls $GtmTxtDir | sed 's/^[[:space:]]*//' `)
for((i=0;i<${#FileCacheList[*]};i ))
do
PDFtoTxtFile=$GtmTxtDir/${FileCacheList[$i]}
GTMname=`echo ${FileCacheList[$i]} | awk -F"." '{print $1}'`
Nrlist=(` cat -n $PDFtoTxtFile | grep SELx | awk -F" " '{print $1}'`)
NrNameList=(` cat -n $PDFtoTxtFile | grep SELx | awk -F" " '{print $2 $3}' | sed "s/ //g" | sed 's/[{}<>()=]/_/g' `)
for((adc=0;adc<${#Nrlist[*]};adc ))
do
FindNr=${Nrlist[$adc]}
AdcId=${NrNameList[$adc]}
if [ $adc = $[${#Nrlist[*]}-1] ]
then
nextNr=0
ReadLNR=300
else
nextNr=${Nrlist[$adc 1]}
ReadLNR=$[$nextNr-$FindNr]
fi
CatGrep > $AdcTxtDir/$GTMname-$AdcId.txt
AdcType=`cat $AdcTxtDir/$GTMname-$AdcId.txt | grep channel | grep used | awk '{print $NF}'`
cat $AdcTxtDir/$GTMname-$AdcId.txt | grep -E "[0-9]H|^[A-Z]H" | sed "s/ //g" > $AdcTxtDir/set_$GTMname-$AdcId.txt # 重点: 过滤 匹配 行 0~9H 和 A~ZH , 不要进行删除,有跨行的数据
sudo rm -rf $AdcTxtDir/$GTMname-$AdcId.txt
sed -i "s/^/$GTMname-$AdcId-$AdcType---/g" $AdcTxtDir/set_$GTMname-$AdcId.txt # sed 的单引号 不会解析变量
echo " PDFtoTxtFile=$PDFtoTxtFilefile GTMname=$GTMname AdcId=$AdcId AdcType=$AdcType FindNr=$FindNr nextNr=$nextNr "
done
done
}
FindTom()
{
ADCMaxFlag=0;
AdcfileList=(`ls $AdcTxtDir`)
echo "";echo "";
read -p "请输出 需要触发的ADC的编号 和 TOMx 空格隔开, 为你匹配 TOMx_xx 案例 adc1 TOM3 写 1 TOM3 : " inputTOMBL
inputTOMList=($inputTOMBL) # 变量需要转换为数组
FindAdcId=${inputTOMList[0]}
TOMName=${inputTOMList[1]}
AdcTypeGrepM="ADCx 8"
AdcTypeGrepN="ADCx"
echo "输入的信息为: $FindAdcId $TOMName "
for i in ${AdcfileList[*]}
do
AdcFile=$AdcTxtDir/$i
AdcNumberMin=(` echo $i | awk -F"_" '{print $8}' | awk -F"-" '{print $1}' | sed "s/ //g"`)
AdcNumberMax=(` echo $i | awk -F"_" '{print $8}' | awk -F"-" '{print $2}' | sed "s/ //g"`)
if [[ $FindAdcId > 7 ]]
then
FindAdcId=$[ FindAdcId - 7 ]
ADCMaxFlag=1;
#echo "[8] adc 编号 大于 7 "
else
if [[ $ADCMaxFlag < 1 ]]
then
ADCMaxFlag=0;
#echo "[x] adc 编号 小于 7 "
fi
fi
# echo "当前文件 $file 表示的 ADC 范围 最小数: ${AdcNumberMin[*]} 最大数: ${AdcNumberMax[*]} 当前输入触发: ADC $FindAdcId ADC 类型: $AdcTypeGrep TOM模块 : $TOMName" ; echo ""
if [[ $FindAdcId -ge $AdcNumberMin && $FindAdcId -le $AdcNumberMax ]]
then
#echo "[ok] 文件中 $file 触发: ADC $FindAdcId ADC 类型: $AdcTypeGrep TOM模块 : $TOMName "
#echo " 长度: $AdcTypeGrepLenght 查找到的内容如下: "
if [[ $ADCMaxFlag < 1 ]]
then
cat $AdcFile | grep $TOMName | grep $AdcTypeGrepN | grep -v "$AdcTypeGrepM"
else
cat $AdcFile | grep $TOMName | grep $AdcTypeGrepM
fi
# break
else
echo ""
#echo "当前 ADC ID : $FindAdcId ADC 类型: $AdcTypeGrep 不在当前文件中,继续往下查找 ..."
fi
done
}
main()
{
clear
read -p "是否清空缓存重新整理文件,回车跳过 y/n: " ifdel
if [[ ! -d $GtmTxtDir && ! -d $AdcTxtDir ]]
then
delFalg=1
echo "当前 缓存文件不存在,因此重新生成缓存..."
else
delFalg=0
fi
if [[ $ifdel = y || $delFalg = 1 ]]
then
echo "[ok] delect and reset Cache file."
sudo rm -rf $GtmTxtDir $AdcTxtDir $PdfDir/*.txt
sudo mkdir -p $GtmTxtDir $AdcTxtDir $PdfDir
sudo chmod 777 $GtmTxtDir $AdcTxtDir
else
echo "[exit] not delect Cache file."
fi
catNR
echo "所有的行号为: " ${Nrlist[*]}
for((i=0;i<${#Nrlist[*]};i ))
do
FindNr=${Nrlist[$i]}
ReadHNR=1
if [ $i = $[${#Nrlist[*]}-1] ]
then
nextNr=0
ReadLNR=$[$NrFinally-$FindNr]
echo "Can 结束 行号: $ReadLNR" ;
else
nextNr=${Nrlist[$i 1]}
ReadLNR=$[$nextNr-$FindNr]
fi
echo "FindNr=$FindNr nextNr=$nextNr ReadLNR=$ReadLNR NameList=( ${NameList[*]} )"
name=${NameList[$i]}
echo "开始匹配行号: $FindNr"
CatGrep > $GtmTxtDir/$name.txt
done
CatFile
FindTom
}
main