두 개의 .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
두 열의 차이가 있습니다.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