ファイルで特定の文字列が見つかるたびに2行をマージしたいと思います。
入力例:
{
id: 23281598
total: {
value: 3.0
}
isThin: false
raw: {
value: 6.0
}
}
total: {
value: 1.401326182E9
}
Pools: {
value: 8.98886247E8
希望の出力:
{
id: 23281598
total: { value: 3.0
}
isThin: false
raw: { value: 6.0
}
}
total: { value: 1.401326182E9
}
Pools: { value: 8.98886247E8
ご存知のように、パターンを見つけるたびにvalue:
ファイルの前の行と組み合わせたいと思います。各行の先頭のスペースを削除すると、私に効果的です。必要awk
またはsed
解決策があります。入力ファイルには固定パターンがありません。含まれている行はvalue:
どこにでも表示できますが、連続して表示することはできません。
Solaris 5.10を使用してください。
ベストアンサー1
フロント:
LC_ALL=C sed -e '$!N;/value:/b1' -e 'P;D' -e:1 -e 's/\n[[:space:]]*/ /' <file
とても簡単です:
$!N
: 最後の行を除く各行について、次の行を読みます。/value:/b1
: パターンが一致した場合、名前の付いたブランチに移動1
P;D
:パターンが一致しない場合は、現在の行を印刷し、$!N
上から行を読み取って新しいループを開始します。したがって、ある場合は、line1\nline2
印刷してline1
新しいループを開始してline2
作成する$!N
などline2\nline3
の操作を実行します。:1
:名前付きブランチを定義します。1
's/\n[[:space:]]*/ /'
:四半期に1
含まれる改行と先行スペースを単一のスペースに置き換えます。