次のログファイルがあります。
27/12/2020 00:05:30,848 ===== Request ======
code = 0
trigger1 = false
trigger2 = false
field = {
1|status=0
2|tag=abcdef
3|price=35
...
}
===== Response =====
code = 1
trigger1 = false
trigger2 = false
field = {
5|id=123
1|status=404
2|tag=ghijkl
4|barcode=26121111
3|price=35
...
}
27/12/2020 00:10:35,941 ===== Request ======
code = 0
trigger1 = false
trigger2 = false
field = {
1|status=0
2|tag=abcdef
3|price=35
...
}
===== Response =====
code = 1
trigger1 = false
trigger2 = false
field = {
5|id=123
1|status=404
2|tag=ghijkl
4|barcode=26121111
3|price=35
...
}
...
あまり役に立たない領域をすべて示します。次のようなテーブルを作成したい(またはcsvファイルも問題ありません)。
Time id status tag price barcode
27/12/2020 00:05:30,848 Null 0 abcdef 35 Null
27/12/2020 00:05:30,848 123 404 ghijkl 35 26121111
27/12/2020 00:10:35,941 Null 0 abcdef 35 Null
27/12/2020 00:10:35,941 123 404 ghijkl 35 26121111
使ったこのソリューションしかし、うまく動作しません。 :(出力数は同じですが、IDとバーコードはないため、現在は一時的にステータスgrep
、ラベル、価格を単一のファイルに追加するために使用しています。私のコードpaste
はビットです:
grep "1|status=" file > status
grep "2|tag=" file > tag
grep "3|price=" file > price
paste status tag price > output
私の出力ファイルは次のとおりです
1|status=0 2|tag=abcdef 3|price=35
1|status=404 2|tag=ghijkl 3|price=35
1|status=0 2|tag=abcdef 3|price=35
1|status=404 2|tag=ghijkl 3|price=35
field = { * }
それぞれをgrepしてnullを返さない場合は、すべてのキー値があることを確認したいと思います。私はbashスクリプトに初めて触れたので、私の解決策が最適化されたかどうかはわかりません。あなたの助けが必要です。ありがとうございます! ! !
答え1
$ cat tst.awk
BEGIN {
OFS = "\t"
numTags = split("Time id status tag price barcode",tags)
for (tagNr=1; tagNr<=numTags; tagNr++) {
tag = tags[tagNr]
printf "%s%s", tag, (tagNr<numTags ? OFS : ORS)
}
}
/= Request =/ {
time = substr($0,1,23)
}
sub(/^[[:space:]]*([0-9]+\|)?/,"") {
tag = val = $0
sub(/[[:space:]]*=.*/,"",tag)
sub(/[^=]+=[[:space:]]*/,"",val)
tag2val[tag] = val
}
/^}/ {
tag2val["Time"] = time
for (tagNr=1; tagNr<=numTags; tagNr++) {
tag = tags[tagNr]
val = (tag in tag2val ? tag2val[tag] : "Null")
printf "%s%s", val, (tagNr<numTags ? OFS : ORS)
}
delete tag2val
}
$ awk -f tst.awk file | column -s$'\t' -t
Time id status tag price barcode
27/12/2020 00:05:30,848 Null 0 abcdef 35 Null
27/12/2020 00:05:30,848 123 404 ghijkl 35 26121111
27/12/2020 00:10:35,941 Null 0 abcdef 35 Null
27/12/2020 00:10:35,941 123 404 ghijkl 35 26121111