2013-04-30 58 views
0

这里的语法有什么问题?仅替换字段3

awk -F '|' 'sub/\s*\w*/,"Visit our website!","$3"' merchant_report 

它假设把

|bob|jones| blagblag| texas 
|tom|markus| | alabama 

|bob|jones|Visit our website!| texas 
|tom|markus| | alabama 
+0

1)不是所有的awk都支持\ s和\ w。 2)sub()是一个函数,不是来自sed的“s”命令。 3)你可能想把这些命令放在awk主体的action部分,而不是contory(aka pattern)部分。现在请查看awk手册,http://www.gnu.org/software/gawk/manual/gawk.html,并购买匹配的书“有效的Awk编程”,第三版,作者:Arnold Robbins。 – 2013-04-30 18:14:35

回答

1

此行可能会做你想要什么:

awk -F'|' -v OFS="|" 'NR==1{$4="Visit our website!"}1' file 
在AWK代码

  • 你有FS来分隔字段,你不需要sub函数,只需直接设置$3
  • 即使用sub()函数,你的语法不正确。您可以通过man gawk
  • 得到详细信息它实际上不是$3,它是$4。因为你开头的行|如果你想只改变第一行
  • ,你应该添加NR==1否则awk将做更改所有线路上的

例子的代码:

kent$ cat file 
    |bob|jones| blagblag| texas 
    |tom|markus| | alabama 

kent$ awk -F'|' -v OFS="|" 'NR==1{$4="Visit our website!"}1' file 
    |bob|jones|Visit our website!| texas 
    |tom|markus| | alabama 
0

awk中,您只需为该字段指定给定行的新值。如果你对替换方法更加适应,试试sed

sed '1s/|[^|]*/|Visit our website!/3' file 
|bob|jones|Visit our website!| texas 
|tom|markus| | alabama