Bash脚本乘以CSV值

时间:2014-01-03 05:15:12

标签: bash csv sed awk

我有一个棘手的CSV,应该用bash编辑。 这里CSV中的典型行如何

  

A; B; C; D; E

     

1234567; 7654321; 100,00; ABC; 0,00

我的目标是将十进制(C列)乘以一个因子(例如0,01)并在B列中加上一个前缀。所以CSV将会像这样看起来:

  

A; B; C; D; E

     

1234567; ABC-7654321; 105,00; ABC; 0,00

3 个答案:

答案 0 :(得分:2)

使用awk

awk -F\; '{$2="abc-"$2;$3*=0.01}1' OFS=\; file
1234567;abc-7654321;1;ABC;0,00

100,00*0,01=1而非105,00

答案 1 :(得分:1)

export factor=0.01
prefix=abc-
IFS=';' while read a b c d e; do
  echo $a;$prefix$b;$(echo "$(echo $c|tr ',' '.')*$factor" | bc | tr '.' ',');$d;$e
done < inputfile > outputfile

答案 2 :(得分:0)

非常感谢所有贡献者,最后我可以将它们全部放在一起跟随bash代码:

#!/bin/bash
##############################
factor='1.1'
sourcefile=whatever.txt
inputfile=whatever.csv
outputfile=import.csv
##############################

cp $sourcefile $inputfile;
sed -i -e 's/,/./g' $inputfile

awk -F ";" '{
        if ($1 =="Cust_id")
                print "a;b";
        else
                print "abc-" $2 ";" $3*f;
        }' f="$factor" $inputfile > $outputfile
echo 0

输出看起来像那样,也许有人可以告诉我如何把它变成x.2十进制格式?

a;b
abc-1000317;6.556