したがって、指定されたポートでnetcatをリッスンし、出力をログファイルに保存します。明らかに、ログファイルはonelinerです。どのようにフォーマットを正しく指定するのですか? grcまたは同様のプログラムを統合して色を追加し、埋め込み色コードを微妙に削除する場合は、追加のポイントがあります。
入力(sedスクリプトによって誤って処理された、/ \ n /無視)
[{"startTime":"1","categoryName":"2","data":"3","level":"4","context":"5","pid":7520},"2021-03-25T08:01:08.086Z","default",["6"],{"level":20000,"levelStr":"7","colour":"8"},{},"Hello, log4js! \n","INFO","green"]__LOG4JS__[{"startTime":"1","categoryName":"2","data":"3","level":"4","context":"5","pid":7520},"2021-03-25T08:01:08.096Z","default",["6"],{"level":30000,"levelStr":"7","colour":"8"},{},"Test warning! This is not a drill! \n","WARN","yellow"]__LOG4JS__[{"startTime":"1","categoryName":"2","data":"3","level":"4","context":"5","pid":7520},"2021-03-25T08:01:08.229Z","default",["6"],{"level":20000,"levelStr":"7","colour":"8"},{}/\\n/,"Connected to mongo","INFO","green"]
出力
[{"startTime":"1","categoryName":"2","data":"3","level":"4","context":"5","pid":7520},
"2021-03-25T08:01:08.086Z","default",["6"],{"level":20000,"levelStr":"7","colour":"8"},{},"Hello, log4js! \n","INFO","green"]__LOG4JS__[{"startTime":"1","categoryName":"2","data":"3","level":"4","context":"5","pid":7520},
"2021-03-25T08:01:08.096Z","default",["6"],{"level":30000,"levelStr":"7","colour":"8"},{},"Test warning! This is not a drill! \n","WARN","yellow"]__LOG4JS__[{"startTime":"1","categoryName":"2","data":"3","level":"4","context":"5","pid":7520},
"2021-03-25T08:01:08.229Z","default",["6"],{"level":20000,"levelStr":"7","colour":"8"},{}/\\n/,"Connected to mongo","INFO","green"]
私はこれを達成しようとします(これは不正確であることに注意してください)
awk '{gsub(/\\n/,"__LOG4JS__")}1' a="$(ncat -l -k 10.0.0.1 10000)" log.log
ベストアンサー1
何をしたいのかは明確ではありませんが、それぞれを__LOG4JS__
改行文字に変換することであれば、複数文字RSにGNU awkを使用すると問題が解決します(/\\n/
3行目の偽の内容を削除するために入力を修正しました)。間違ったJSONを生成しますが、実際には実際のデータには存在しないようです.)
$ awk -v RS='__LOG4JS__|\r?\n' '1' file
[{"startTime":"1","categoryName":"2","data":"3","level":"4","context":"5","pid":7520},"2021-03-25T08:01:08.086Z","default",["6"],{"level":20000,"levelStr":"7","colour":"8"},{},"Hello, log4js! \n","INFO","green"]
[{"startTime":"1","categoryName":"2","data":"3","level":"4","context":"5","pid":7520},"2021-03-25T08:01:08.096Z","default",["6"],{"level":30000,"levelStr":"7","colour":"8"},{},"Test warning! This is not a drill! \n","WARN","yellow"]
[{"startTime":"1","categoryName":"2","data":"3","level":"4","context":"5","pid":7520},"2021-03-25T08:01:08.229Z","default",["6"],{"level":20000,"levelStr":"7","colour":"8"},{},"Connected to mongo","INFO","green"]
awkで同じことができますが、これはファイル全体をメモリに読み込みます(同等のsedソリューションに似ています)。
awk '{sub(/\r$/,""); gsub(/__LOG4JS__/,ORS)}1' file
他のタスクを実行する場合は、そのタスクが何であるかを明確にし、予想される出力が表示されるように質問の例を更新してください。
フォーマットされたjson出力を表示するには、上記のコードを使用してください。
$ awk -v RS='__LOG4JS__|\r?\n' '1' file | jq .
[
{
"startTime": "1",
"categoryName": "2",
"data": "3",
"level": "4",
"context": "5",
"pid": 7520
},
"2021-03-25T08:01:08.086Z",
"default",
[
"6"
],
{
"level": 20000,
"levelStr": "7",
"colour": "8"
},
{},
"Hello, log4js! \n",
"INFO",
"green"
]
[
{
"startTime": "1",
"categoryName": "2",
"data": "3",
"level": "4",
"context": "5",
"pid": 7520
},
"2021-03-25T08:01:08.096Z",
"default",
[
"6"
],
{
"level": 30000,
"levelStr": "7",
"colour": "8"
},
{},
"Test warning! This is not a drill! \n",
"WARN",
"yellow"
]
[
{
"startTime": "1",
"categoryName": "2",
"data": "3",
"level": "4",
"context": "5",
"pid": 7520
},
"2021-03-25T08:01:08.229Z",
"default",
[
"6"
],
{
"level": 20000,
"levelStr": "7",
"colour": "8"
},
{},
"Connected to mongo",
"INFO",
"green"
]