私は、タグの各ブロックは、オブジェクトを移入するために必要なデータを表し、このスピードアップこのbashスクリプト
<Tag1>content
<Tag2>optional tag content
<Tag3>content
<Tag1>other content
<Tag3>other content
のような形式のデータを含むファイルを持っています。一部のタグもオプションです。
現在、私はこのコードタグとtrは、データを以下のいずれかの新しい行を削除した後、カットデータを取得
#!/bin/bash
tag1=""
tag2=""
tag3=""
while read line; do
if [[ $line == '<Tag1>'* ]]
then
tag1=`echo $line | cut -c 6- | tr -d '\r'`
elif [[ $line == '<Tag2>'* ]]
then
tag2=`echo $line | cut -c 6- | tr -d '\r'`
elif [[ $line == '<Tag3>'* ]]
then
tag3=`echo $line | cut -c 6- | tr -d '\r'`
#write new object to output file and reset tag variables
fi
done <file.dat
とデータファイルを処理しています。
このコードは非常に遅いですが、何千ものファイルを処理する場合は特にそうです。
これを行うための高速な方法がありますか、オプションのタグを処理する方法はありますか? "
EDIT:
イムので、私は、INSERT文を作成するために、出力を使用して、SQLテーブルを移入するためにそれを使用して:
echo "INSERT INTO MyTable VALUES('$tag1','$tag2','$tag3');" >> output.sql
第二編集
<Tag1>Some sample text including don't
<Tag2>http://google.com
<Tag3>$100
の入力を考えます
理想的な出力は、INSERT INTO MyTable Values(「いくつかのサンプルテキストには、 、 "http://google.com"、 "$ 100");
単引用符を使用して値を渡して引用符を使用しない場合は、「入力しない」のようにアポストロフィを2倍しなければならないことは明らかです。あなたが期待される出力を示していないので、
はい、awkで書き直すと、少なくとも1桁以上速くなります。[なぜシェルをループ処理するのかを理解するために(https:///unix.stackexchange.com/questions/169716/why-is-using-a-shell-loop-to-process-text-considered-bad-practice)。あなたの質問は、私たちがあなたを助けることができるように入力を与えられた期待される出力を表示する。 –
@Ed出力を含めるように編集しました – najd1103
@EdMortonごめんなさい最新の編集がうまくいけばあなたの質問に答えてくださいね – najd1103