2015-12-10 70 views
0

僅供參考,我是一個awk/gsub noob。awk/gsub - 顯示字符串之前,然後之前,然後之前gsub

我有一個SVN轉儲我想要創建,格式users.txt ...

user.name = user name <[email protected]> 

這裏就是我得...

awk '/svn:author/ { getline; getline; gsub("[\.]", " ", $1); print $0, " = ", $1 , " <", $0, "@foo.com>"}' svn_dmp | sort | uniq 

不幸的是,它正在改變$0值,並移除所有.,所以我得到...

mr foo = mr foo <mr [email protected]> 

我希望gsub會將新字符串寫入$1並保留$0。如何僅在中間的mr.foo中交換點的空間?

+0

'$ 0'是整條生產線,其中包括'$ 1',所以當你改變'$ 1'你改變的'$ 0'這部分也是如此。 – jas

+2

在使用它之前,請務必閱讀並完全理解關於getline的所有警告和gothcas,然後通常您不會。無論如何,你的問題不需要getline,你使用它的方式是錯誤的。發佈幾行樣本輸入和預期輸出,我們可以幫助您。 –

回答

2

$0是整行,其中包括$1,所以當您更改$1時,您也正在更改$0的那一部分。如果您想保留原始$0,則需要在修改$1之前將其保存在另一個變量中。

喜歡的東西

$ echo 'mr.foo' | awk '{orig=$0 
         gsub("[\.]", " ", $1) 
         print orig " = " $1 " <" orig "@foo.com>"}' 

mr.foo = mr foo <[email protected]>