文件中的awk搜索模式.匹配时替换行,不匹配时按原样打印



我有一个以TAB分隔的文件,如下所示:

sample.rpt:

54 67 common/bin/my/home {{bla bla bla}} {bla bla} ReplaceMe
89 75 bad/rainy/day/out {{ some bla} } {some bla} DontreplaceMe

我想对第三项进行regexp匹配,比如common/bin/my/home并且如果存在匹配,则我想将第6项CCD_ 2替换为我自己的文本,如happy Home

此外,我的regexp将是一个shell变量,因此我需要一个命令它接受regexp作为变量

项目可能有空格或反斜杠,文件为Tab分离。

为了实现这一点,我使用了以下awk一行:

下面我检查字段3是否与drv指定的模式匹配,然后执行括号中的任何操作{}

awk -F "t" -v drv=$mod_pat '$3 ~ drv 
  { OFS= "t"; $6 = " happy_home"; print;}' sample.rpt

现在的问题是,如果图案不匹配。这在同一个命令中可能吗?

我试过了:

awk -F "t" -v drv=$mod_pat 
  'if ($3 ~ drv) { OFS= "t"; $6 = " happy_home"; print;} else {print;}' sample.rpt

但是它抛出了解析错误。可能是awk语法有问题。

1是具有默认操作{print $0}的模式
http://www.gnu.org/software/gawk/manual/html_node/Very-Simple.html

awk -Ft -v OFS=t -v drv="home" '$3~drv{$6=" happy_home"} 1' sample.rpt 

如果要使用"if"语句,则需要围绕awk程序使用{}。例如:

awk -F "t" -v drv=$mod_pat '{ if ($3 ~ drv) { OFS= "t"; $6 = " happy_home"; print;} else {print;} }' sample.rpt

最新更新