次のテキスト行を特定の順序でソートしたいと思います。私が使用した命令は、sort
空白を取り除き、すべての行をスペースで区切らずに束ねてアルファベット順に整理することでした。各ブロックには8行のデータがあります。
セッション: cabSessionID: 052FPBP6Q6X2XGERWHBT
cabLoginID: 053XCDTF8D4J6PD3BG8P
ログイン: jack
userAgent: Mozilla/5.0
sessionStartTime: 2018-10-01T01:04:10.898 totalJSHeapSize 使用: 42358792
JHeapSize :36482584セッション: cabSessionID: 052FPBP6Q6X2XGERWHJE
cabLoginID: 053XCDTF8D4J6PD3BG8P
ログイン: jack
userAgent: Mozilla/5.0
sessionStartTime: 2018-10-01T01:16:41.558合計
JSHeapSize
: 17 775404 0
JSHeapSize 使用: 44842320メモリ情報: jsHeapSizeLimit: 2217857988
合計 JSHeapSize: 45252608
JSHeapSize 使用: 24555080
セッション: cabSessionID: 055S75T4QC8JYC4Q0456
cabLoginID:3G
0
セッション
開始時間:2018- 10-23T19:11:11.871Z
私は最終結果が次のようになりたいです。
ログイン: jack
cabLoginID: 053XCDTF8D4J6PD3BG8P
セッション: cabSessionID: 052FPBP6Q6X2XGERWHBT
userAgent: Mozilla/5.0
sessionStartTime: 2018-10-01T01:04:10.898
使用される
合計JSHeapSize:42358792
JHeapSize:36482584ログイン: jack
cabLoginID: 053XCDTF8D4J6PD3BG8P
セッション: cabSessionID: 052FPBP6Q6X2XGERWHJE
userAgent: Mozilla/5.0
sessionStartTime: 2018-10-01T01:16:41.558合計
JSHeapSize
: 17 775404 0
JSHeapSize 使用: 44842320ログイン: fred
cabLoginID: 053XCDTF8D4J6PD3BG8P
セッション: cabSessionID: 055S75T4QC8JYC4Q0456
userAgent: Mozilla/5.0
sessionStartTime: 2018-10-23T19:11:21 988
合計
JSヒープサイズ:4525 2608章
JSHeapSize使用:24555080
ベストアンサー1
ハードコーディングされた「順序」が必要なので、awkは連想配列内の各チャンクのデータをコンパイルし、必要な順序で配列を印刷します。
スクリプトファイル.awk
BEGIN {
FS=":"
}
/./ {
values[$1]=$0
}
/^$/ {
print values["loginName"]
print values["cabLoginID"]
print values["session"]
print values["userAgent"]
print values["sessionStartTime"]
print values["memoryInfo"]
print values["totalJSHeapSize"]
print values["usedJSHeapSize"]
print ""
delete values
}
END {
print values["loginName"]
print values["cabLoginID"]
print values["session"]
print values["userAgent"]
print values["sessionStartTime"]
print values["memoryInfo"]
print values["totalJSHeapSize"]
print values["usedJSHeapSize"]
}
次に、次を実行します。
awk -f scriptfile.awk < input
あるいは、ブロックラインの順序は気にしませんが、まだ一貫した順序を維持し、GNU awkがある場合、
gnuscript.awk
BEGIN {
FS=":"
PROCINFO["sorted_in"]="@val_str_asc";
}
/./ {
values[$1]=$0
}
/^$/ {
asort(values)
for (element in values)
print values[element]
print ""
delete values
}
END {
asort(values)
for (element in values)
print values[element]
}
上記のスクリプトは、各ブロックの行をアルファベット順に印刷します。
cabLoginID:053XCDTF8D4J6PD3BG8P
loginName:jack
memoryInfo:jsHeapSizeLimit:2217857988
session:cabSessionID:052FPBP6Q6X2XGERWHBT
sessionStartTime:2018-10-01T01:04:10.899Z
totalJSHeapSize:42358792
usedJSHeapSize:36482584
userAgent:Mozilla/5.0
...