1

5 列の値を持つ長い csv ファイルがあります。列からすべての値を抽出し、この値を bc に渡してコサインを抽出するにはどうすればよいですか?

awk を使用して値を抽出しようとしていますが、すべての値を bc に渡そうとすると失敗します。

ご関心をお寄せいただきありがとうございます。

ロベルト

4

3 に答える 3

2

次のように、フィールドごとの余弦を計算するためcsvにを処理できます。(g)awk

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

HTH

于 2011-11-28T12:47:01.200 に答える
1

質問で尋ねたように、awkとbcだけを使用したい場合は、次のようにすることができます。

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

たとえば、「c(1)」を含む文字列をにパイプするようにしてくださいbc -l

于 2011-11-28T21:23:36.877 に答える
0

ハ、ほんの数分遅れました。あなたの質問には情報が不足していますが、私が書いたものにもかかわらずPythonで行う必要がありますが、挑戦のためにBASHで行うことにしました(AWKではありません)。

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:~$ 

OK、私の最初の解決策は確かに醜く、計算量が膨大です。より良い解決策は次のとおりです。

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

-aフラグは行を配列に変換します。これIFSは、内部フィールド セパレータです (「 」を参照man bash)。

于 2011-11-28T12:59:03.333 に答える