選択した出力を切り取ろうとしている 10GB の CSV ファイルがあります。現時点では次のものがありますが、サイズが大きいためにリソースを消費しすぎているため、最適化を検討しています。
#!/bin/bash
FILE=data.txt
FILEPATH=/home/user/
if [[ -z $1 ]]; then
echo "No search parameter specified. Specify one when running this."
fi
echo "Searching $FILEPATH/$FILE for $1.. this may take a while."
echo ""
while IFS= read -r LINE;
do
# Grep for $1 and cut select columns
grep $1 | cut -d"," -f7,9,15,16,19,22,23,24
done
入力ファイルのサンプル行は次のようになります。
結果: キー=値1、エラー=0、コマンド=SetOperator|ソース: ファイル=/home/user/logs/current、start_date=20130128、
私がやりたいことは、ファイルで任意の値を検索し、結果が見つかったすべての行から (カットされたバージョンの) 結果を返すようにすることです。
たとえば、「20130128」を検索すると、次のように返されます。
SetOperator,value1,20130128,
つまり、コマンドと等号の両方を区切り文字として処理する必要があります。
私は SO (つまり、this ) を調べて、いくつかの Google-fu を費やしましたが、「読み取り」は遅く、これらのような大きなファイルには最適化されていないことが一般的に認められています。私は多くの選択肢を見つけていません。
何を使用することをお勧めしますか?
ありがとう!