スクリプトファイル.awk

スクリプトファイル.awk

次のテキスト行を特定の順序でソートしたいと思います。私が使用した命令は、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
...

おすすめ記事