awkでbashループの効率を上げる


1

1つのファイルの2番目の列から抽出されたテキストを使用して、かなり大きなテキストファイル(> 300,000行)を作成し、各行の先頭にテキストを追加して、最後に新しいファイルに書き出します。

次のwhileループがあり、正常に動作しています。ただし、実行に時間がかかり、実行ごとに数分かかります。私は、もっと速いawkのより良いレシピ/方法があると思います。誰でもより速い方法を提案できますか。

SOURCEFILEの例

useless9   important1   more useless stuff
useless8   important2   more useless stuff
useless7   important3   more useless stuff
useless6   important4   more useless stuff

ソースファイルからテキストを抽出し、最終結果ファイルを出力します。

while read line; do

  mytext=`echo $line | awk -v RS='\r\n' '{print $2}'`

  echo "$PrePattern $mytext $PostPattern" >> $OUTFILE

done < $SOURCEFILE

OUTFILE

PrePattern text important1 PostPattern text
PrePattern text important2 PostPattern text
PrePattern text important3 PostPattern text
...

1
ソースファイルのサンプル行を表示します。そのループ全体はおそらくawk -v pre="$PrePattern" -v post="$PostPattern" '{print pre, $2, post}' "$SOURCEFILE"
グレンジャックマン

グレン・ジャックマン、どうもありがとう!私が疑ったように、パフォーマンスの向上が必要でした。あなたのソリューションは、ちょうど〜3秒に〜15分間のプロセスを回し
スローポーク

ちょうど1がどうなるときには、ゲインの多くは30万個のawkのプロセスを起動する必要がされていません
グレン・ジャックマン

回答:


1

さらにawkを勉強する必要があります。

awk '{print "prepattern mytext "$2" postpattern";}' <$sourcefile >$outfile

2
これが何をするのかを説明することで、その教育プロセスを開始できますか?ありがとう。
fixer1234

@ fixer1234それではなく、awkのマニュアルページを読み、投稿した例を見てください。その後、具体的な質問がある場合は、それらのポイントを理解するのに役立ちます。
ビングバン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.