收藏文章 楼主

linux 命令 对 PDF 文件进行查找,需要将 PDF 转 txt 文件,工具 poppler-utils

版块:linux   类型:普通   作者:小绿叶技术博客   查看:817   回复:0   获赞:0   时间:2024-04-17 16:41:26



#!/bin/bash
#sudo apt install -y poppler-utils # 安装工具
#pdftotext input.pdf output.txt # 转换 为 txt 文件


sudo chmod 777 ./ ; sudo chmod 777 -R ./*

file=gtmtoadc.txt
CacheDir="./txt"
AdcDir="./adc"

catNR()
{

    Nrlist=(`cat -n $file | grep "GTM_ADCTRIGiOUT" |  awk -F" " '{print $1}'`)
    NameList=(`cat -n $file | grep "GTM_ADCTRIGiOUT" |  awk -F" " '{print $2 $3}' | sed 's/[{}<>()=]/_/g' `)

    NrFinally=(`cat -n $file | grep "GTM to CAN/TTCAN Connections" | grep -vE "26-366|Overview" | awk -F" " '{print $1}'`)

    #     file=gtmtoadc.txt ; cat -n $file | grep "GTM_ADCTRIGiOUT" |  awk -F" " '{print $2 $3}'
    #     file=gtmtoadc.txt ; cat -n $file | grep "GTM to CAN/TTCAN Connections" | grep -vE "26-366|Overview" | awk -F" " '{print $1}'

}

CatGrep()
{
  
    # 检查文件是否存在
    if [ ! -f "$file" ]; then
        echo "文件不存在: $file"
        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)' "$file" | \
    grep -vwE  '^[0-9]|^[0-9][0-9]' | grep -vE "rw|SEL[0-9]" | sed "/^$/d "


}


CatFile()
{
    FileCacheList=(`ls $CacheDir`)
    for((i=0;i<${#FileCacheList[*]};i++))
    do 
        file=$CacheDir/${FileCacheList[$i]}
        GTMname=`echo ${FileCacheList[$i]} | awk -F"." '{print $1}'`

        Nrlist=(` cat -n $file  | grep SELx | awk -F" " '{print $1}'`)
        NrNameList=(` cat -n $file  | 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 > $AdcDir/$GTMname-$AdcId.txt 
            AdcType=`cat $AdcDir/$GTMname-$AdcId.txt | grep channel | grep used | awk '{print $NF}'`

            cat $AdcDir/$GTMname-$AdcId.txt  | grep -E "^[0-9]H|^[A-Z]H"  > $AdcDir/set_$GTMname-$AdcId.txt   # 重点: 过滤 匹配 行  0~9H 和 A~ZH , 不要进行删除,有跨行的数据
            sudo rm -rf $AdcDir/$GTMname-$AdcId.txt

            sed -i "s/^/$GTMname-$AdcId-$AdcType---/g" $AdcDir/set_$GTMname-$AdcId.txt      # sed 的单引号 不会解析变量 

            echo " file=$file  GTMname=$GTMname  AdcId=$AdcId  AdcType=$AdcType  FindNr=$FindNr  nextNr=$nextNr "   
        done 


    done 
}

# 问题: 需要解决 增加条件  ATOM  和 TOM  


FindTom()
{
    ADCMaxFlag=0;
    fileList=(`ls $AdcDir`)
    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 ${fileList[*]}
    do  
        file=$AdcDir/$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 $file | grep $TOMName | grep  $AdcTypeGrepN | grep -v "$AdcTypeGrepM" 
            else 
                cat $file | 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 $CacheDir && ! -d $AdcDir ]]
    then 
        delFalg=1
        echo "当前 缓存文件不存在,因此重新生成缓存..." 
    else 
        delFalg=0
    fi 

    if [[ $ifdel = y || $delFalg = 1 ]]
    then 
        echo "[ok] delect and reset Cache file."    
        sudo rm -rf $CacheDir $AdcDir 
        sudo mkdir $CacheDir $AdcDir
        sudo chmod 777 $CacheDir $AdcDir
    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 > ./txt/$name.txt

    done

    CatFile

    FindTom

}
main 






主机监控系统【软著登字第15121829号】提交信息登录 http://yundun.ddoss.cn 邮箱: proposal@ddoss.cn 
回复列表
默认   热门   正序   倒序

回复:linux 命令 对 PDF 文件进行查找,需要将 PDF 转 txt 文件,工具 poppler-utils

头像

用户名:

粉丝数:

签名:

资料 关注 好友 消息