如果另一列值与字符串匹配,则使用awk修改列值

如果另一列值与字符串匹配,则使用awk修改列值,awk,Awk,我有一个文件的以下输出: host1|ip1|LCOS| host2|ip2|Linux| hos3|ip3|Linux|DiskStation Manager 如果设置了$4 DiskStation Manager,则应将$3更改为DiskStation Manager 我尝试了以下方法,但没有任何改变 { if( $4 ~ /DiskStation Manager/) $3=$4} 既然事先知道字符串,为什么还要使用~呢?您可以进行文字字符串相等匹配。还要注意的是,匹配字符串中有一个输入

我有一个文件的以下输出:

host1|ip1|LCOS|
host2|ip2|Linux|
hos3|ip3|Linux|DiskStation Manager
如果设置了$4 DiskStation Manager,则应将$3更改为DiskStation Manager

我尝试了以下方法,但没有任何改变

{ if( $4 ~ /DiskStation Manager/) $3=$4}
既然事先知道字符串,为什么还要使用~呢?您可以进行文字字符串相等匹配。还要注意的是,匹配字符串中有一个输入错误,该站有一个大写字母S

下面是您尝试的简化版本,在{..}操作部分中没有显式的if条件。这样做的好处是,可以忽略使用预期字符串处理不包含$4的任何其他行。{..}1只需根据对列值和输入/输出字段分隔符的修改来重写行

awk -v FS="|" 'BEGIN { OFS = FS } $4 == "DiskStation Manager" { $3 = $4 }1'
或者,如果使用正则表达式方法,则在字符串周围放置锚,以获得精确匹配

$4 ~ /^DiskStation Manager$/

您忘记打印所需的输出。