あるフィールドの内容を別のフィールドの内容に置き換える

あるフィールドの内容を別のフィールドの内容に置き換える

ここでは、区切り文字に基づいて最初の列を分割したいと思います-。最後の列(ここでは列2)は最後の値に基づいて入力する必要があります。値が01orの場合は、99それぞれ2またはに置き換えます1

#input
PE01-02-01  -9
PE01-02-99  -9
PE01-03-01  -9
PE01-03-99  -9
PE01-05-01  -9
PE01-05-99  -9

#output
PE01-02-01  2
PE01-02-99  1
PE01-03-01  2
PE01-03-99  1
PE01-05-01  2
PE01-05-99  1

これを達成する方法についてのアドバイスを提供できますか?最初の列を配列に分解して最後の要素にアクセスし、2番目の列を更新しようとしています。

ベストアンサー1

ネストを使用すると、やや不思議にこれを行うことができます。条件付き演算子?:(別名三項演算子)

awk '{$2 = $1 ~ /-01$/? 2: $1 ~ /-99$/? 1: $1; print}' input

PE01-02-01 2
PE01-02-99 1
PE01-03-01 2
PE01-03-99 1
PE01-05-01 2
PE01-05-99 1

交互に

awk '{n = split($1, a, "-"); $2 = a[n] == "01" ? 2: a[n] == "99"? 1: a[n]; print}' input

おすすめ記事