function err_exit
{
print -u2 -n "\t"
print -u2 -r ${Command}[$1]: "${@:2}"
let Errors+=1
}
alias err_exit='err_exit $LINENO'
Command=${0##*/}
integer Errors=0
tmp=$(mktemp -dt) || { err_exit mktemp -dt failed; exit 1; }
trap "cd /; rm -rf $tmp" EXIT
tmp1=$tmp/tmp1.csv
tmp2=$tmp/tmp2.csv
cat > $tmp1 <<- \EOF
CAT,"CVE CCODE","NECA OCN",ST,LATA,AP,"New InterState
Orig","New Inter""""State
Term","New IntraState
Orig","New IntraState
Term"
CLEC,XXXX,AAAA,RB,ABC,comp," 0.2 "," 0.4 "," 0.6 "," 0.8 "
CLEC,YYYY,QQQQ,SX,123,mmmm," 0.3 "," 0.5 "," 0.7 "," 0.9 "
EOF
integer count=0 nfields
IFS=${2-,}
for j in 1 2
do typeset -a arr
while read -A -S arr
do ((nfields=${#arr[@]}))
if ((++count==1))
then ((nfields==10)) || err_exit 'first record should contain 10 fields'
[[ ${arr[7]} == $'New Inter""State\nTerm' ]] || err_exit $'7th field of record 1 should contain New Inter""State\nTerm'
fi
for ((i=0; i < nfields;i++))
do delim=$IFS
if ((i == nfields-1))
then delim=$'\r\n'
fi
if ((i==1))
then printf "%#q%s" "${arr[i]}" "$delim"
else printf "%(csv)q%s" "${arr[i]}" "$delim"
fi
done
done < $tmp1 > $tmp2
done
diff "$tmp1" "$tmp2" >/dev/null 2>&1 || err_exit "files $tmp1 and $tmp2 differ"
exit $((Errors<125?Errors:125))