如何使用awk获取Ubuntu中2个csv文件中相同column2值的column1值的计算结果?

时间:2014-09-02 11:44:11

标签: linux csv ubuntu awk

我正在使用ubuntu,我们得到了一个csv file1.csv,其中2列看起来像

a,1
b,2
c,3
...

和另一个有2列的file2.csv看起来像

a,4
b,3
d,2
...

第1列中的某些值出现在file1.csv中,但不出现在file2.csv和反cersa中,这些值不应出现在result.csv中。假设file1.csv中第一列的值为x,file2.csv中第一列的值与column2值相同,为y。如何使用awk计算Ubuntu中2个csv文件的第二行(x-y)/(x + y)来得到这样的result.csv:

a,-0.6
b,-0.2

-0.6由(1-4)/(1 + 4)计算 -0.2由(2-3)/(2 + 3)

计算

1 个答案:

答案 0 :(得分:0)

这个怎么样?

$ awk 'BEGIN{FS=OFS=","} FNR==NR {a[$1]=$2; next} {if ($1 in a) print $1,(a[$1]-$2)/(a[$1]+$2)}' f1 f2
a,-0.6
b,-0.2

解释

  • BEGIN{FS=OFS=","}将输入和输出字段分隔符设置为逗号。
  • FNR==NR {a[$1]=$2; next}当processinig第一个文件时,在数组a[]中存储a[first col]=second col等值。
  • 循环遍历第二个文件时,
  • {if ($1 in a) print $1,(a[$1]-$2)/(a[$1]+$2)}在每一行上执行:检查第一个col是否存储在a[]数组中;如果是,请打印(x-y)/(x+y)x=stored valuey=current second column