2013-04-30 60 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