
2つの.csvファイルからこのようなものを生成するpythonic pandasメソッドを使用する代わりに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
2列の違いがあります。value_a
value_b
この列には、value_a
file2.csvからfile1.csvの2番目の列を減算した結果の差がなければなりません。これは、value_b
file2.csvからfile1.csvの3番目の列を引いた結果の差がなければなりません。
したがって、結果は次のようになります。
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