連続した行で一致するテキストを見つけ、次の行の値を増やします。

連続した行で一致するテキストを見つけ、次の行の値を増やします。

ファイル内の文字列(Name2)を見つけ、次の行でバージョン(* abc-xyz-0-197)を一致させ、増分値でID行を更新しようとしています。

これはどのように達成できますか?

ファイルは次のようになります。

  Name1:
    version: *abc-xyz-0-197
    ID: 1
    primary_data: 
    somedata:
      

  Name2:
    version: *abc-xyz-0-196
    ID: 3
    primary_data: 
    somedata:

  Name3:
    version: *abc-xyz-0-192
    ID: 6
    primary_data: 
    somedata:

出力は次のようになります。 (名前2とバージョン:* abc-xyz-0-196)

  Name1:
    version: *abc-xyz-0-197
    ID: 1
    primary_data: 
    somedata:
      

  Name2:
    version: *abc-xyz-0-196
    ID: **4**
    primary_data: 
    somedata:

  Name3:
    version: *abc-xyz-0-192
    ID: 6
    primary_data: 
    somedata:

ベストアンサー1

入力ファイルの短絡モード処理を有効にするには、空の文字列を使用しawkて設定します。RS=

awk -v RS= -F'\n' '$1 ~ /^ *Name2:$/ && $2 ~ /^ *version: \*abc-xyz-0-196$/ {
    bakline=$0; sub(/.*ID:/,""); newId=$0+1; 
    $0=bakline"\n"; sub(/ID: [0-9]+/,"ID: " newId);
}1' infile

1行目と2行目が要件と一致することを確認し、一致するチャンクからバックアップし、すべてを削除し、ID:残りの有効な文字列を増やし、バックアップ変数からチャンクを返し、IDをnewId値に置き換えます。

おすすめ記事