我正在使用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)
计算答案 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 value
和y=current second column
。