在一列中搜索字符并替换另一列匹配记录中的值

在一列中搜索字符并替换另一列匹配记录中的值

我需要在第 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

我该如何使用awk,sedperl

答案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

相关内容