仅供参考,我是一个awk / gsub noob。
我有一个svn转储我正在尝试创建一个users.txt,格式化......
user.name = user name <user.name@foo.com>
这是我必须去的地方......
awk '/svn:author/ { getline; getline; gsub("[\.]", " ", $1); print $0, " = ", $1 , " <", $0, "@foo.com>"}' svn_dmp | sort | uniq
不幸的是,它正在更改$0
的值并删除所有.
,所以我得到了......
mr foo = mr foo <mr foo@foo.com>
我希望gsub
将新字符串写入$1
并保留$0
。如何仅在中间mr.foo
中交换空格?
答案 0 :(得分: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 <mr.foo@foo.com>