
非常に大きなログ ファイルをフィルター処理しようとしているのですが、コマンドの代替手段や最適化方法があるかどうか知りたいです。コードは次のとおりです。
#!/bin/bash
nice -20 sed '/./{H;$!d;};x;/37455299339/!d' 1.txt > /tmp/new.txt
nice -20 sed -n '/Acct-Status-Type/,/NAS-Identifier/p' /tmp/new.txt > /tmp/new_1.txt
rm /tmp/new.txt
nice -20 sed '/Acct-Status-Type/{x;p;x;}' /tmp/new_1.txt > /tmp/new_2.txt
rm /tmp/new_1.txt
nice -20 less /tmp/new_2.txt | grep -A1 -B1 37455299339 | grep -A1 -B1 User-Name > new_3.txt
答え1
最初のステップとして、すべての一時ファイルを削除し、代わりにパイプを使用します。1sed
つ目のファイルから stdout を 2 つ目のファイルへ、次に 3 つ目のファイルへパイプします。その後、コマンドはless
役に立たなくなります。3 つ目のファイルから へ再度パイプするだけsed
ですgrep
。
パイプを使用すると、多くの利点が得られます。まず、ディスク領域を無駄にすることがなくなり、次に、すべてのディスク I/O を待機する必要がなくなります。
よりよい解決策を見つけるために、現在何がブロックされているのか教えてください。それはコマンドの 1 つですかsed
? どのコマンドですか?