繁体   English   中英

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

[英]How to use awk to get the result of computation of column1 value of the same column2 value in 2 csv files in Ubuntu?

我正在使用ubuntu,我们有2列的csv file1.csv看起来像

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

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

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

第1列值中的某些值出现在file1.csv中,但没有出现在file2.csv中,反之亦然,这些值不应出现在result.csv中。 假设file1.csv中第一列的值为x,而file2.csv中具有相同column2值的第一列的值为y。 如何使用awk在Ubuntu中计算2个csv文件的第二行的(xy)/(x + y),以得到result.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} 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)}第二个文件中循环时{if ($1 in a) print $1,(a[$1]-$2)/(a[$1]+$2)} ,则在每一行上执行以下操作:检查第一个col是否存储在a[]数组; 如果是这样,则打印(xy)/(x+y)x=stored valuey=current second column

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM