分页: 1 / 1

出现不明错误???

发表于 : 2009-04-26 17:02
jioyo源
我有文本内容如下
file-1
1| 0.322| 0.715| 3.480| 0| 0.322| 3.480
2| 0.019| 0.709| 2.582| 0| 0.019| 3.480
3| 0.016| 0.686| 2.702| 0| 0.016| 3.480
4| 0.072| 0.712| 2.567| 0| 0.016| 3.480
5| 0.031| 0.779| 3.876| 0| 0.016| 3.876
6| 0.024| 0.717| 3.076| 0| 0.016| 3.876
7| 0.015| 0.723| 3.503| 0| 0.015| 3.876
8| 0.123| 0.728| 3.877| 0| 0.015| 3.877
9| 0.275| 0.731| 2.664| 0| 0.015| 3.877
10| 0.276| 0.843| 2.811| 0| 0.015| 3.877

file-2
em01.gif
em02.gif
em03.gif
em04.gif
em05.gif
em06.gif
em07.gif
em08.gif
em09.gif
em10.gif
我想用file-2的内容替换file-1中的1-10:

代码: 全选

awk -F "|" '{getline i <file_2;gsub($1,i,$0);print $0>FILENAME}' file_1
结果如下
em01.gif| 0.322| 0.7em01.gif5| 3.480| 0| 0.322| 3.480
em02.gif| 0.019| 0.709| em02.gif.58em02.gif| 0| 0.019| 3.480
em03.gif| 0.016| 0.686| 2.702| 0| 0.016| em03.gif.480
em04.gif| 0.072| 0.712| 2.567| 0| 0.016| 3.em04.gif80
em05.gif| 0.031| 0.779| 3.876| 0| 0.016| 3.876
em06.gif| 0.024| 0.717| 3.07em06.gif| 0| 0.01em06.gif| 3.87em06.gif
em07.gif| 0.015| 0.em07.gif23| 3.503| 0| 0.015| 3.8em07.gif6
em08.gif| 0.123| 0.72em08.gif| 3.em08.gif77| 0| 0.015| 3.em08.gif77
em09.gif| 0.275| 0.731| 2.664| 0| 0.015| 3.877
em100.gif| 0.276| 0.843| 2.811| 0| 0.015| 3.877
分格符后面的也被替换了这是为什么???

Re: 出现不明错误???

发表于 : 2009-04-26 21:17
jioyo源
:em18 没人帮我……

Re: 出现不明错误???

发表于 : 2009-04-26 22:50
yjcong
awk -F "|" '{getline i <file_2;gsub("^"$1,i,$0);print $0>FILENAME}' file_1

其实我开始也不了解awk里的gsub的用法, 但看你的结果, 显然$1不是特指开始的那个位置, 而是之那个位置上的数字。所以, 在gsub里的$1前加个表示行首的"^"就成了

Re: 出现不明错误???

发表于 : 2009-04-26 23:43
jioyo源
yjcong 写了:awk -F "|" '{getline i <file_2;gsub("^"$1,i,$0);print $0>FILENAME}' file_1

其实我开始也不了解awk里的gsub的用法, 但看你的结果, 显然$1不是特指开始的那个位置, 而是之那个位置上的数字。所以, 在gsub里的$1前加个表示行首的"^"就成了
$1表示awk读入的第一个字段,gsub是awk的内部函数,$1在gsub内的意义不会变呀……

Re: 出现不明错误???

发表于 : 2009-04-27 1:32
yjcong
jioyo源 写了:
yjcong 写了:awk -F "|" '{getline i <file_2;gsub("^"$1,i,$0);print $0>FILENAME}' file_1

其实我开始也不了解awk里的gsub的用法, 但看你的结果, 显然$1不是特指开始的那个位置, 而是之那个位置上的数字。所以, 在gsub里的$1前加个表示行首的"^"就成了
$1表示awk读入的第一个字段,gsub是awk的内部函数,$1在gsub内的意义不会变呀……
用你的命令
当读取第1行的时候, $1表示1.看看你给的结果, 第1行里所有的“1”都被替换成fem01.gif
当读取第2行的时候, $1表示2.看看你给的结果, 第2行里所有的“2”都被替换成fem02.gif
当读取第3行的时候, $1表示3.看看你给的结果, 第3行里所有的“3”都被替换成fem03.gif
.
.
.
当读取第N行的时候, $1表示N。 看看你给的结果, 第N行里所有的“N”都被替换成femN.gif
.
.

Re: 出现不明错误???

发表于 : 2009-04-27 1:45
jioyo源
yjcong 写了:
jioyo源 写了:
yjcong 写了:awk -F "|" '{getline i <file_2;gsub("^"$1,i,$0);print $0>FILENAME}' file_1

其实我开始也不了解awk里的gsub的用法, 但看你的结果, 显然$1不是特指开始的那个位置, 而是之那个位置上的数字。所以, 在gsub里的$1前加个表示行首的"^"就成了
$1表示awk读入的第一个字段,gsub是awk的内部函数,$1在gsub内的意义不会变呀……
用你的命令
当读取第1行的时候, $1表示1.看看你给的结果, 第1行里所有的“1”都被替换成fem01.gif
当读取第2行的时候, $1表示2.看看你给的结果, 第2行里所有的“2”都被替换成fem02.gif
当读取第3行的时候, $1表示3.看看你给的结果, 第3行里所有的“3”都被替换成fem03.gif
.
.
.
当读取第N行的时候, $1表示N。 看看你给的结果, 第N行里所有的“N”都被替换成femN.gif
.
.
:em18
我也不知道为什么,所以才求助呀,错在哪里呢……

Re: 出现不明错误???

发表于 : 2009-04-27 1:57
yjcong
a="2.22A222.222222.22222222.22222222222"
echo $a|awk -F. '{print $1;gsub($1,99999,$b);print $b}'
==>
2
99999.9999999999A999999999999999.999999999999999999999999999999.9999999999999999999999999999999999999999.9999999999999999999999999999999999999999999999999999999

我不了解awk, 但这里的$1显然会在被使用是自动替换成2, 所以, 你说的“gsub是awk的内部函数,$1在gsub内的意义不会变呀”不对。 或者你对“$1在gsub内的意义不会变”理解有误

如果你坚持“$1在gsub内的意义不会变”, 应该找几个例子吧

Re: 出现不明错误???

发表于 : 2009-04-27 10:17
jioyo源
:em03 知道怎么回事了,谢谢了
$1在gsub中的意义并没有变,只是在gsub中,将$1作为正则来匹配,然后进行全局替换,改gsub为sub就可以了

em01.gif| 0.322| 0.715| 3.480| 0| 0.322| 3.480
em02.gif| 0.019| 0.709| 2.582| 0| 0.019| 3.480
em03.gif| 0.016| 0.686| 2.702| 0| 0.016| 3.480
em04.gif| 0.072| 0.712| 2.567| 0| 0.016| 3.480
em05.gif| 0.031| 0.779| 3.876| 0| 0.016| 3.876
em06.gif| 0.024| 0.717| 3.076| 0| 0.016| 3.876
em07.gif| 0.015| 0.723| 3.503| 0| 0.015| 3.876
em08.gif| 0.123| 0.728| 3.877| 0| 0.015| 3.877
em09.gif| 0.275| 0.731| 2.664| 0| 0.015| 3.877
em10.gif| 0.276| 0.843| 2.811| 0| 0.015| 3.877

Re: 出现不明错误???

发表于 : 2009-04-27 10:46
yjcong
gsub(regular expression, substitution string, target string)

但是即使用gsub也可以啊, 正则就正则了, 加个^就成了。

awk -F "|" '{getline i <file_2;gsub("^"$1,i,$0);print $0>FILENAME}' file_1

Re: 出现不明错误???

发表于 : 2009-04-27 18:44
jioyo源
yjcong 写了:gsub(regular expression, substitution string, target string)

但是即使用gsub也可以啊, 正则就正则了, 加个^就成了。

awk -F "|" '{getline i <file_2;gsub("^"$1,i,$0);print $0>FILENAME}' file_1
:em03 嗯,谢谢……
嗯,那个……“^”为什么要加双引号,我试了下不加,不行,用/^$1/也不行,这是为什么??

Re: 出现不明错误???

发表于 : 2009-04-27 22:00
yjcong
jioyo源 写了:
yjcong 写了:gsub(regular expression, substitution string, target string)

但是即使用gsub也可以啊, 正则就正则了, 加个^就成了。

awk -F "|" '{getline i <file_2;gsub("^"$1,i,$0);print $0>FILENAME}' file_1
:em03 嗯,谢谢……
嗯,那个……“^”为什么要加双引号,我试了下不加,不行,用/^$1/也不行,这是为什么??
加引号也是我试出来的,原因不明。反正不同的软件都有一套自己的正则,我怀疑是gsub特有的, 但不确定。等那些牛人来解答吧。

但我觉得用sub会节省些运行的消耗