他のファイルと比較してファイルの列値を変更するには?
ファイルが2つあります。テスト1.csvそしてtest2.csvempdep
;列を交換する必要がありますテスト1.csvその値が次のような場合「シンボル*」。 2番目のファイルtest2.csv値を置き換えるのに必要な値があります。「シンボル*」。
注:私は以下を使用していますksh
。テスト1.csv約2,048,576行があります。test2.csv行は10,000です。
テスト1.csv
empname,place,empdep
aaaa,city1,001
bbbb,city2,sign-1
dddd,city1,005
ffff,city5,sign-2
hhhh,city7,sign-1
test2.csv
empname,new
aaaa,001
bbbb,002
cccc,003
dddd,005
eeee,006
ffff,007
gggg,008
hhhh,009
予想される結果:
empname,place,empdep
aaaa,city1,001
bbbb,city2,002
dddd,city1,005
ffff,city5,007
hhhh,city7,009
ベストアンサー1
そしてawk
:
awk '
BEGIN{ FS=OFS="," } # set input/output field separator to `,`
NR==FNR{ # if this is the first file `test2.csv`
a[$1]=$2 # store field2 in array `a` using field1 as index
next # continue with next line
}
$3 ~ /^sign/{ # if field3 of `test1.csv` begins with `sign`
$3=a[$1] # replace the field with array value (index of field1)
}
1 # print the line
' test2.csv test1.csv