4列の値に基づいて3列の値を変更する方法

4列の値に基づいて3列の値を変更する方法

次のファイルがありますtest.txt

000092;;;;2004;;;;N;;;;N

000098;;;;0086;;;;Y;;;;Y

3番目の列の値に基づいて4番目の列の値を更新したいと思います。 4列の値がある場合はN3列の値をに置き換えNA、4列の値がある場合はY3列の値をに置き換えます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修正
無条件アクションと同じ:(結果)行印刷NNA
{ print; }

おすすめ記事