次のファイルがありますtest.txt
。
000092;;;;2004;;;;N;;;;N
000098;;;;0086;;;;Y;;;;Y
3番目の列の値に基づいて4番目の列の値を更新したいと思います。 4列の値がある場合はN
3列の値をに置き換えNA
、4列の値がある場合はY
3列の値をに置き換えますUPDATE
。
出力は次のようになります。
000092;;;;2004;;;;NA;;;;N
000098;;;;0086;;;;UPDATE;;;;Y
ベストアンサー1
awk -F ';;;;' -v 'OFS=;;;;' '$4 == "Y" { $3 = "UPDATE" } $4 == "N" { $3 = "NA" } { print; }' test.txt
test.txt
質問印刷で指定されているとおり
000092;;;;2004;;;;NA;;;;N
000098;;;;0086;;;;UPDATE;;;;Y
;;;;
質問で言及されているように、実際には(単一のセミコロン)で区切られた13列の代わりに(4つのセミコロン)で区切られた4列のみがあるとします;
。したがって、4つのグループの間に追加のデータを含む行がある場合、このスクリプトは機能しません;
。
説明する:
-F ';;;;'
入力フィールド区切り記号の設定出力フィールド区切り記号設定
-v 'OFS=;;;;'
条件
$4 == "Y"
:フィールド4の場合はいY
{ $3 = "UPDATE" }
アクション:フィールド3修正
無条件アクションと同じ:(結果)行印刷N
NA
{ print; }