我试图计算文件第二行和第三行中定界符(分号,逗号或管道)的数量。如果计数不匹配,则文件应移至拒绝的文件夹。当文件位于“ 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
答案 0 :(得分:1)
将/ dev / null添加到您的查找结果中:
findresult="$(find $pathname -type f ( .... )) /dev/null"
因此,sed还会有一些空白可供处理,而不是等待用户输入
答案 1 :(得分: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