次の形式の多くのセクションを含むファイルがあります。各セクションの間に空白行があることを確認してください。完成したファイルがインデックス名に基づいてアルファベット順に各セクションになるようにこのファイルをソートしたいと思います。これは可能ですか?
[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= ...
(最後に空白行があります)
参考資料:
- 組み込み文字列関数3つのパラメータの場合
match()
- gawkで事前定義された配列スキャン順序を使用する