Linux 如何使用awk在Ubuntu的2个csv文件中获得相同column1值的column1值的计算结果?
我正在使用ubuntu,我们得到了一个csv文件1.csv,有两列,看起来像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计
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=当前第二列