複数行の文字列と情報を含む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