看下bash代码:
#!/bin/bash
# get "orderno" and "order_money" from datafile of thisside or otherside, save the result to file xxx.bak
# 把金额的单位全部化为:元
function get_orderNo_orderMoney()
{
if [ $1 == "|" ]; then
let n1=1
let n2=3
let n3=1000
elif [ $1 == "," ]; then
let n1=2
let n2=6
let n3=1
else
echo "Unrecognized separator"
exit 1
fi
for i in $*
do
if [ $i != $1 ]; then
cp $i temp
dos2unix temp
if [ $1 == "," ]; then
sed '1d' temp > temp2
mv temp2 temp
fi
awk -F "$1" "{print \$$n1 \"\t\" \$$n2/$n3}" temp > temp2
sort temp2 > temp
fname="result/`basename $i`.bak"
mv temp $fname
fi
done
}
get_orderNo_orderMoney "|" ebm/*.txt
get_orderNo_orderMoney "," junbao/*.txt
rm -f temp*
说明:上面代码实现了对指定目录下指定文件,根据不同的分隔符,取出不同的列,并把结果保存到xxx.bak文件中。
关键:因为分隔符不同,所以取的列不同,为了在awk中根据参数值取出不同的列,所以写法比较特殊。特地记下:
awk -F "$1" "{print \$$n1 \"\t\" \$$n2/$n3}" temp > temp2
上面的意思是取出第n1和n2列,中间以制表符分开,其中n1和n2的值根据分隔符的不同设定为不同的值。而且对于第n2列的数据,是将其除以1000后再取出来的。