ファイルの各行を読み込み、idフィールドを取得し、ユーティリティを実行して名前を取得し、最後に名前を追加する小さなスクリプトがあります。問題は、入力ファイルが膨大であること(2GB)です。出力は10-30文字の名前が付加された入力と同じなので、同じ桁の大きさです。どのようにして大きなバッファを読み込み、バッファで処理してバッファに書き込んでファイルへのアクセスを最小限に抑えるために最適化できますか?kshスクリプトの最適化
#!/bin/ksh
while read line
do
id=`echo ${line}|cut -d',' -f 3`
NAME=$(id2name ${id} | cut -d':' -f 4)
if [[ $? -ne 0 ]]; then
NAME="ERROR"
echo "Error getting name from id2name for id: ${id}"
fi
echo "${line},\"${NAME}\"" >> ${MYFILE}
done < ${MYFILE}.csv
おかげ
デニスに感謝します。 id2nameはidに基づいてユーザー名を取得し、ユーティリティを制御することはできません。しかし、私はIDと対応する名前を持って、dbを打つ前にローカル検索をしたい。タイプセット-Aを試しましたが、kshでは認識されません。 SunOSでは残念ながらksh93は利用できません。代替ソリューションはありますか?ありがとう – Kiran
Hmm、行の構文エラーを取得しています。IFS =:read -r field1 field2 field3 NAME remainder <<< $(id2name $ id) 9行目の文法エラー: '<'予期しない <<<または私の解釈の悪いバージョンですか? – Kiran
@キラン:私の編集された答えを見てください。 –