![](/img/trans.png)
[英]How to use awk to add the value of second lines of 2 csv files in Ubuntu?
[英]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 value
, y=current second column
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.