ある列から文字を検索し、別の列で一致するレコードの値を置き換えます。

ある列から文字を検索し、別の列で一致するレコードの値を置き換えます。

列 4 で値 2 を探し、列 6 を一致する場所ごとに先行する "-" 記号に置き換える必要があります。

csvファイルがあるとします - file1はこんな感じです。

abc,0,def,1234,ijk
xyz,2,def,2345,abc
ijk,2,def,5678,ijl

次の出力を提供するには正規表現が必要です。

abc,0,def,1234,ijk
xyz,2,def,-2345,abc
ijk,2,def,-5678,ijl

どのように使用しますかawksedまたはperl

答え1

解決策awk

$ awk -F',' '$2 == 2 {$4 = "-"$4}1' OFS=',' file
abc,0,def,1234,ijk
xyz,2,def,-2345,abc
ijk,2,def,-5678,ijl

同等perl

$ perl -F',' -anle '$F[3] = "-".$F[3] if $F[1] == 2; print join ",", @F' file

関連情報