2013-04-25 46 views
0

我試圖在awk腳本中連接兩個字符串,但得到的結果在最後一個位置有一個「0」。awk:String Concat添加「0」

(input...) | awk '$1 ~ "match" { 
      (...) 
      STRING1 = $2 ; 
      STRING2 = $3 ; 

      RESULT = STRING1 "" STRING2 ; 

      print RESULT ; 

    }' | (output....) 

如果例如, $2 = "Foo"$3 = "Bla",結果將是「FooBla0」。

如何連接結果爲「FooBla」的那兩個字符串?

+0

一些東西必須丟失,像一個平行的例子,如'echo「hi」「he」「hi」| awk'$ 1〜「hi」{a = $ 2; b = $ 3; ab = a「」b;打印ab}''正在工作。 – fedorqui 2013-04-25 11:39:48

回答

2

代碼給出一個0不追加到行無論你的代碼是不完整的,你的輸入是不是如你預期或您的問題簡單化你忽略了信息的關鍵部分:

$ cat file 
match foo bla 

$ awk '$1 ~ "match" { 
      STRING1 = $2 ; 
      STRING2 = $3 ; 

      RESULT = STRING1 "" STRING2 ; 

      print RESULT ; 

    }' file 
foobla 

注:這是一個很大的不必要的代碼,一個簡單的現場拼接:

$ awk '$1=="match"{print $2$3}' file 
foobla 

也知道$1=="match"$1~"match"第一之間的差異是滿場的字符串匹配第二個是正則表達式匹配。如果你真的想第二個我建議使用$1~/match/


正如我懷疑你錯過了在那裏的信息關鍵部分,print fflush()打印功能的退出狀態。你想print RESULT;fflush()或更好,但只需將函數調用放在腳本的下一行。

+0

感謝您的幫助。 是的,我嘗試了幾次,在一些程序中運行 - 有些程序沒有運行。 ;) 但現在我發現我的錯誤:「打印結果」工作 - 但我有「打印結果fflush()」,「0」在那裏,因爲「fflush()」... 我知道,對於這個小例子我的awk-Statement包含很多 不必要的代碼,但是整個語句有超過20行,所以我 需要這個;-) – CFP 2013-04-25 11:59:46

+0

好吧,謝謝;) - 所以一個簡單的失蹤「;」是問題:D – CFP 2013-04-25 12:08:56

+0

沒問題,是啊:) – 2013-04-25 12:09:37