web-dev-qa-db-ja.com

BashのCSVファイルの特定の列に対する算術演算

内容が次のようなファイルがあります。

A,10,20,30,40,50
B,20,40,10,30,60
C,30,50,20,40,10
D,40,50,20,10,30

上記のCSVファイルの特定の列(たとえば列3)に対して算術演算(たとえば10による除算)を実行したいと思います。そのため、次のようになります。

A,10,2,30,40,50
B,20,4,10,30,60
C,30,5,20,40,10
D,40,5,20,10,30

これはどのように行うことができますか?

3
Mandar Shinde

これを試して:

% awk -F , -v OFS=, '$3/=10' <file
A,10,2,30,40,50
B,20,4,10,30,60
C,30,5,20,40,10
D,40,5,20,10,30
9
cuonglm

本当に bashで実行したい場合は、次のことができます。

$ while IFS="," read a b c rest; do 
    printf "%s,%s,%s,%s\n" $a $b $((c/10)) $rest; 
  done < file.csv 
A,10,2,30,40,50
B,20,4,10,30,60
C,30,5,20,40,10
D,40,5,20,10,30

これは単純な整数算術では機能しますが、bashは浮動小数点数を処理できないため、非整数を生成する算術演算を試行すると失敗します。恐ろしく。 Bashは、ここでの作業に最適なツールではありません。

1
terdon