>

파일의 두 번째 및 세 번째 줄에서 구분 기호 (세미콜론 또는 쉼표 또는 파이프) 수를 계산하려고합니다. 개수가 일치하지 않으면 파일이 거부 된 폴더로 이동해야합니다. 파일이 "pathname =/opt/interfaces/sample_check/mvfiles/inbox"위치에 있으면 스크립트가 제대로 작동하는 것입니다. 그러나 파일이 해당 위치에 있지 않으면 스크립트는 강제 중단 될 때까지 몇 시간 동안 계속 실행됩니다. 뭔가 빠졌습니까? 도와주세요.

pathname=/opt/interfaces/sample_check/mvfiles/inbox
findresult=$(find $pathname -type f ( -name "messagemulti.csv" -or -name "messagesemi.txt" -or -name "comma2.txt" -or -name "messagepipe.txt" -or -name "tokkalodi.txt" -or -name "ADMC_POSITION-LT3213.csv" -or -name "DMC_CASHFLOW248.csv" -or -name "ADMC_EQBASKET-WEIGHTS_52387.csv" -or -name "ADMC_POSITION-DDD7.csv" -or -name "ADMC_POSITION-DDD7.csv" ))

Count=`sed -n 2p $findresult | tr '[,]' '\n' | tr '[|]' '\n' | tr '[;]' '\n' | wc -l`
Count2=`sed -n 3p $findresult | tr '[,]' '\n' | tr '[|]' '\n' | tr '[;]' '\n' | wc -l`
echo $Count
echo $Count2
#if the delimiter count from the 2nd line and 3rd line doesnt match the    file will move to the rejected folder
if [ $Count != $Count2 ]
 then echo "Mis Match"
 mv $findresult /opt/interfaces/sample_check/mvfiles/reject
 else echo "Match"
 exit
 fi

  • 답변 # 1

    계산하기 전에 결과를 테스트하십시오. 또한 약간의 변경을했습니다 :

    if [ -n "${findresult}" ]; then
       Count=$(sed -n 2p ${findresult}  | tr ',|;' '\n' | wc -l)
       Count2=$(sed -n 3p ${findresult} | tr ',|;' '\n' | wc -l)
    fi
    
    

    아마도 당신은 wc 를 피하고 싶어 :

    if [ -n "${findresult}" ]; then
        str1=$(sed -n '2s/[^,|;]//gp' ${findresult})
        str2=$(sed -n '3s/[^,|;]//gp' ${findresult})
     fi
     if [ ${#str1) -ne ${#str2} ]; then
    
    

  • 답변 # 2

    찾기 결과에/dev/null을 추가하십시오 :

    findresult="$(find $pathname -type f ( .... )) /dev/null"
    
    

    sed는 사용자 입력을 기다리지 않고 추가로 비어있는 것을 얻는다

관련 자료

  • 이전 git - VSCode에서 원점을 어떻게 변경합니까?
  • 다음 ghostscript - gs를 통해 pdf를 ps로 변환 할 때 문제가 발생했습니다