shell脚本:开头的逗号而不是结尾

时间:2018-01-04 14:39:29

标签: shell unix

这是我的shell脚本的一部分。

for line in `cat $1`
do
        startNum=`echo $line | awk -F "," '{print $1}'`
        endNum=`echo $line | awk -F "," '{print $2}'`
        operator=`echo $line | awk -F "," '{print $3}'`
        termPrefix=`echo $line | awk -F "," '{print $4}'`

        if [[ "$endNum" == 81* ]] || [[ "$endNum" == 33* ]] || [[ "$endNum" == 55* ]]
        then
                areaCode="${endNum:0:2}"
                series="${endNum:2:4}"
                startCLI="${startNum:6:4}"
                endCLI="${endNum:6:4}"
        else
                areaCode="${endNum:0:3}"
                series="${endNum:3:3}"
                startCLI="${startNum:6:4}"
                endCLI="${endNum:6:4}"
        fi

echo "Add,${areaCode},${series},${startCLI},${endCLI},${termPrefix},"
#>> ${File}

done

输入是csv包含多行:

5557017101,5557017101,102,1694
5515585614,5515585614,102,084

输出od shell脚本:

,dd,55,5701,7101,7101,1694
,dd,55,1558,5614,5614,0848

不确定为什么逗号会进入输出的startign,而不是根据shell脚本它最终会出现。

请帮助

1 个答案:

答案 0 :(得分:0)

这是一个建议的awk命令,它应该替换所有的shell + awk代码。此awk还会处理尾随\r

awk -v RS=$'\r' 'BEGIN{FS=OFS=","} NF>3{
   startNum=$1; endNum=$2; termPrefix=$4; 
   if (endNum ~ /^(81|33|55)/) {
      areaCode=substr(endNum,1,2); series=substr(endNum,3,4)
   }
   else {
      areaCode=substr(endNum,1,3); series=substr(endNum,4,3)
   } 
   startCLI=substr(startNum,7,4); endCLI=substr(endNum,7,4);
   print "Add", areaCode, series, startCLI, endCLI, termPrefix
}' file

Add,55,5701,7101,7101,1694
Add,55,1558,8561,5614,084