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

Linux 如何使用awk在Ubuntu的2个csv文件中获得相同column1值的column1值的计算结果?,linux,csv,ubuntu,awk,Linux,Csv,Ubuntu,Awk,我正在使用ubuntu,我们得到了一个csv文件1.csv,有两列,看起来像 a,1 b,2 c,3 ... a,4 b,3 d,2 ... 另一个file2.csv有两列,如下所示 a,1 b,2 c,3 ... a,4 b,3 d,2 ... 第1列中的一些值出现在file1.csv中,但不出现在file2.csv中,反之亦然,这些值不应出现在result.csv中。假设file1.csv中第一列的值为x,file2.csv中具有相同column2值的第一列的值为y。如何使用awk计

我正在使用ubuntu,我们得到了一个csv文件1.csv,有两列,看起来像

a,1
b,2
c,3
...
a,4
b,3
d,2
...
另一个file2.csv有两列,如下所示

a,1
b,2
c,3
...
a,4
b,3
d,2
...
第1列中的一些值出现在file1.csv中,但不出现在file2.csv中,反之亦然,这些值不应出现在result.csv中。假设file1.csv中第一列的值为x,file2.csv中具有相同column2值的第一列的值为y。如何使用awk计算Ubuntu中2个csv文件的第二行的(x-y)/(x+y)以获得如下结果.csv:

a,-0.6
b,-0.2
-0.6由(1-4)/(1+4)计算得出 -0.2由(2-3)/(2+3)计算得出。

这个呢

$ 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}
    处理第一个文件时,在数组
    a[]
    中存储像
    a[first col]=second col
    这样的值
  • {if($1 in a)print$1,(a[$1]-$2)/(a[$1]+$2)}
    在第二个文件中循环时,在每一行执行以下操作:检查第一个列是否存储在
    a[]
    数组中;如果是,则打印
    (x-y)/(x+y)
    ,即
    x=存储值
    y=当前第二列