アッ

アッ

複数行の文字列と情報を含むlog.txtファイルがあります。

log.txtファイルを1行ずつ読み込むスクリプトとdebugという単語を含むすべての行を作成したいと思います。その行をdebug.txtという名前の新しいファイルに入れ、他のすべての行をinfo.txtに移動する必要があります。

これを行う最良の方法は何ですか? whileループを作成してみましたが、理解できませんでした。ありがとう

答え1

これを行う方法は無数にあります。私が使用する最初の2つはawkとgrepです(順番に)。

アッ

awk '/debug/ { print > "debug.txt" ; next ;} { print } ' logfile > info.txt

どこ

  • /debug/ debugという単語を含む行を選択します。
  • { print > "debug.txt" ; debug.txtで印刷
  • next ;}ログファイルの次の行を読む
  • { print }デバッグしない場合は、標準出力として印刷します。
  • > info.txt標準出力をinfo.txtにリダイレクトする

より正式な順序

awk '/debug/ { print > "debug.txt" ; } 
  $0 !~ /debug/ { print > "info.txt " ; } ' logfile

どこ

  • $0 !~ /debug/つまり、デバッグが表示されなくても大丈夫です。

grep

 grep    debug logfile > debug.txt
 grep -v debug logfile > info.txt

どこ

  • grep debugデバッグを含む行を選択してください。
  • grep -v debugデバッグしたくない行を選択してください
  • ログファイルを2回読みます。

>また、保存を使用すると、>>シェルまたはawkで使用されているときにdebug.txtとinfo.txtの以前の内容が削除されます。

答え2

bashタスクを実行するスクリプトは次のとおりです。

while IFS= read -r line; do
    if [[ $line =~ debug ]]; then
        echo "$line" >>debug.txt
    else
        echo "$line" >>info.txt
    fi
done <log.txt

関連情報