私は、csvファイルの各行の2番目の列をその文字列の一意の値に置き換える200万行のcsvファイルを用意しています。これらはすべてユーザー名で埋められています。私が下にある長いプロセスはうまくいくが、しばらく時間がかかる。Bashスクリプトのcsv操作の最適化
これはハッシュする必要はありませんが、これは次のファイルが矛盾しない場合の確実な方法のようです。
私は決してコーダーではなく、とにかくプロセスを最適化できるかどうか疑問に思っていました。これを行う最善の方法を理解していますが、何らかのスクリプト言語で書かれています。
#!/bin/bash
#Enter Filename to Read
echo "Enter File Name"
read filename
#Extracts Usersnames from file
awk -F "\"*,\"*" '{print $2}' $filename > usernames.txt
#Hashes Usernames using SHA256
cat usernames.txt | while read line; do echo -n $line|openssl sha256 |sed 's/^.* //'; done > hashedusernames.txt
#Deletes usernames out of first file
cat hash.csv | cut -d, -f2 --complement > output.txt
#Pastes hashed usernames to end of first file
paste -d , output.txt hashedusernames.txt > output2.txt
#Moves everything back into place
awk -F "\"*,\"*" '{print $1","$4","$2","$3}' output2.txt > final.csv
サンプルファイルは、全部で7列があるだけ3は
Time Username Size
2017-01-01T14:53.45,Poke.callum,12345
2016-01-01T13:42.56,Test.User,54312
2015-01-01T12:34.34,Another.User,54123
ユーザー名の別のリストを取得し、それらを別々にハッシュしてから参加することを検討しましたか?はい、データベースやスクリプト言語がおそらくそれに適しています。 –
これは繰り返し発生する問題ですか?あなたはいつも同じファイルサイズでそれを行う必要がありますか? – simbabque
これは毎日、はるかに小さいファイルで行うことができます。それはすべてELKスタックにフィードされますが、それでもこのサイズのファイルで使用する必要があります。 – Pokecallum