生成一个包含两个文件差异的文件

生成一个包含两个文件差异的文件

我没有使用 pythonic pandas 方式从两个 .csv 文件生成这样的东西,而是尝试看看是否可以使用awk.

我所拥有的是以下内容:

file1.csv              | file2.csv
name,value_a,value_b   | name,value_a,value_b
A,2,3                  | A,3,5
B,1,5                  | B,5,7
C,5,1                  | C,9,4
D,9,2                  | D,10,20

两个文件中的列$1相同.csv。但列$2$3不同。我想要做的是生成一个具有相同列$1但列$2和的新文件$3value_avalue_b它具有这两个列的差异。

该列value_a应该具有从 file2.csv 中减去 file1.csv 第二列时产生的差异,其中value_b应该具有从 file2.csv 中减去 file1.csv 第三列时产生的差异

所以,结果应该是这样的。

diff.csv
name,value_a,value_b
A,1,2
B,4,2
C,4,3
D,1,18

这可以通过 来完成吗awk?还是我应该坚持走这python3条路?提前致谢

我的尝试:

awk -F, '(FNR==NR){hl[$1]=$2;lh[$1]=$3;next} 
{hl[$1]=$2-hl[$1];lh[$1]=$3-lh[$1];next} #update the arrays with the differences
END{ for (i in hl){print i,":",hl[i],lh[i]}}' file_1.csv file_2.csv  #print them

有更好的方法吗?

答案1

paste -d, file1 file2 |
awk 'BEGIN{ FS=OFS="," }
     NR==1{ print $1, $2, $3; next }
          { print $1, $5-$2, $6-$3 }'

或与awk自身:

awk 'BEGIN   { FS=OFS="," }
     NR==FNR { val_a[$1]=$2; val_b[$1]=$3; next }
     FNR>1   { print $1, val_a[$1]-$2, val_b[$1]-$3; next }1' file2 file1

相关内容