我没有使用 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
和的新文件$3
,value_a
即value_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