Bash 在csv中的值列上使用bc

Bash 在csv中的值列上使用bc,bash,csv,awk,bc,Bash,Csv,Awk,Bc,我有一个长csv文件,有5列值。 如何从列中提取每个值并将该值传递给bc以提取其余弦 我尝试使用awk来提取值,但是当我尝试将每个值传递给bc时,我失败了 提前感谢您的关注 Roberto您可以使用(g)awk处理csv,以计算每个字段的余弦,如: awk -v FS=',' '{for (i=1;i++;i=NF) { printf(" %s\tcos: %s" FS,$i,cos($i)) } ; print }' INPUTFILE HTH哈,只是晚了几分钟,尽管你的问题缺乏信息,而且尽

我有一个长csv文件,有5列值。 如何从列中提取每个值并将该值传递给bc以提取其余弦

我尝试使用awk来提取值,但是当我尝试将每个值传递给bc时,我失败了

提前感谢您的关注


Roberto

您可以使用
(g)awk处理
csv
,以计算每个字段的余弦,如:

awk -v FS=',' '{for (i=1;i++;i=NF) { printf(" %s\tcos: %s" FS,$i,cos($i)) } ; print }' INPUTFILE

HTH

哈,只是晚了几分钟,尽管你的问题缺乏信息,而且尽管我写了什么,你应该用python来做,但我决定,对于挑战,我将用BASH(而不是AWK)来做

好的,我的第一个解决方案确实很难看,而且计算量很大。下面是一个更好的解决方案:

oldifs=$IFS; export IFS=","; cat csvfile.csv | while read -a line; do echo ${line[2]}+${line[1]} | bc; done

-a
标志将行转换为数组。
IFS
是内部字段分隔符(请参见
manbash
)。

如果您只想使用awk和bc,就像您在问题中所问的那样,您可以这样做:

awk '{print "c(" $1 ")"}' file.csv | bc -l

只需确保将一个包含例如“c(1)”的字符串通过管道传输到
bc-l

当您说它失败时,您的意思是什么?你有错误吗?你得到了与你期望的不同的东西吗?并给出一些输入和预期输出的示例。您的awk版本不支持
cos()
函数吗。如果没有,请查找nawk、/usr/xpg4/bin/awk或gawk。您应该能够在awk中执行bc可以执行的任何数学操作。祝你好运。有时候bash在这类任务中真的很迟钝。IMHO,如果你在使用linux或unix,就用Python来做吧…@Oz123:除非你不知道如何使用它。在我看来,将python用于如此简单的任务是相当愚蠢的。@flesk,正如你从我下面的帖子中所看到的,我也知道如何使用BASH,而且我认为它比AWK答案更具可读性。然而,Python代码的可表达性和清晰性绝对是赢家!正如我上面所说的,为什么他的问题需要使用您选择的脚本语言,而这实际上是一项非常简单的任务?他并不是在寻求帮助,用awk和bc创建一个聊天机器人,在生成随机俳句的同时,还可以从互联网上获取实时足球分数。因此,我同意python将是许多其他同样优秀的脚本语言中的一个很好的选择。@flesk,使用python可能是愚蠢的。但我认为可读性很重要。AWK不能像BASH(IMHO)那样可读。因此,我在这里提供了一个计算上更便宜的解决方案,它也比整个AWK或SED解决方案更容易阅读。
awk '{print "c(" $1 ")"}' file.csv | bc -l