テキストファイルのセクションの並べ替え

テキストファイルのセクションの並べ替え

次の形式の多くのセクションを含むファイルがあります。各セクションの間に空白行があることを確認してください。完成したファイルがインデックス名に基づいてアルファベット順に各セクションになるようにこのファイルをソートしたいと思います。これは可能ですか?

[monitor:///..]
disabled = true
index = abc
sourcetype= ...

[monitor:///...]
disabled = true
index = def
sourcetype= ...

ベストアンサー1

使用:

gawk -v RS="" '
  match($0, /index = ([^[:space:]]+)/, m) {
    stanzas[m[1]] = $0
  }
  END {
    PROCINFO["sorted_in"] = "@ind_str_asc"
    ORS = "\n\n"
    for (indx in stanzas) print stanzas[indx]
  }
' file

ファイルに別のセクションを追加してみましょう。

[monitor:///..]
disabled = true
index = xyz
sourcetype= ...

[monitor:///..]
disabled = true
index = abc
sourcetype= ...

[monitor:///...]
disabled = true
index = def
sourcetype= ...

その後、gawkコマンドの結果は次のようになります。

[monitor:///..]
disabled = true
index = abc
sourcetype= ...

[monitor:///...]
disabled = true
index = def
sourcetype= ...

[monitor:///..]
disabled = true
index = xyz
sourcetype= ...

(最後に空白行があります)

参考資料:

おすすめ記事