私は非常に大きなログファイルをフィルタリングしたいのですが、私のコマンドに代わるものがあるかどうか疑問に思います。またはいくつかの最適化?コードは次のとおりです。
#!/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
最初のステップとして、すべての一時ファイルを削除し、代わりにパイプを使用します。最初のファイルから始めて、sed
stdoutを2番目のファイルにパイプし、3番目のファイルにパイプします。もしそうなら、あなたのless
命令は役に立ちません。 3番目のコマンドで再パイプsed
しますgrep
。
パイプを使用すると多くの利点があります。まず、ディスク容量を無駄にせず、2番目に、すべてのディスクI / Oを待つ必要はありません。
解決策をよりよく見つけるには、現在何があなたをブロックしているかを教えてください。コマンドの1つですsed
か?どれ?