我有一个包含5列值的长csv文件。 如何从列中提取每个值并将此值传递给bc以在其上提取余弦?
我正在尝试使用awk来提取值,但是当我尝试将每个值传递给bc时我失败了。
提前感谢您的兴趣。
罗伯特
答案 0 :(得分:2)
您可以使用csv
处理(g)awk
来计算每个字段余弦,例如:
awk -v FS=',' '{for (i=1;i++;i=NF) { printf(" %s\tcos: %s" FS,$i,cos($i)) } ; print }' INPUTFILE
HTH
答案 1 :(得分:1)
如果您只是想使用awk和bc,就像您在问题中提出的那样,您可以这样做:
awk '{print "c(" $1 ")"}' file.csv | bc -l
请确保管道包含例如“c(1)”到bc -l
。
答案 2 :(得分:0)
oz123@debian:~$ cat csvfile.csv
1,2,3
4,5,6
7,8,9
oz123@debian:~$ cat csvfile.csv | ( while
> read line;
> do
> VAR1=`echo $line | cut -d "," -f1` ;
> VAR2=`echo $line | cut -d "," -f2` ;
> echo $VAR1+$VAR2
> echo $VAR1+$VAR2 | bc
>
> done;
>
> )
1+2
3
4+5
9
7+8
15
oz123@debian:~$
好的,我的第一个解决方案确实是UGLY,而且计算量很大。这是一个更好的解决方案:
oldifs=$IFS; export IFS=","; cat csvfile.csv | while read -a line; do echo ${line[2]}+${line[1]} | bc; done
-a
标志将行转换为数组。 IFS
是内部字段分隔符(请参阅man bash
)。