出现不明错误???

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
jioyo源
帖子: 3476
注册时间: 2008-10-08 13:48

出现不明错误???

#1

帖子 jioyo源 » 2009-04-26 17:02

我有文本内容如下
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
分格符后面的也被替换了这是为什么???
--------------------------------------
论坛精华贴全集:http://forum.ubuntu.org.cn/viewtopic.php?f=48&t=199845
book:http://forum.ubuntu.org.cn/viewtopic.php?f=21&t=198286
头像
jioyo源
帖子: 3476
注册时间: 2008-10-08 13:48

Re: 出现不明错误???

#2

帖子 jioyo源 » 2009-04-26 21:17

:em18 没人帮我……
--------------------------------------
论坛精华贴全集:http://forum.ubuntu.org.cn/viewtopic.php?f=48&t=199845
book:http://forum.ubuntu.org.cn/viewtopic.php?f=21&t=198286
头像
yjcong
帖子: 2470
注册时间: 2006-02-28 3:11

Re: 出现不明错误???

#3

帖子 yjcong » 2009-04-26 22:50

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

其实我开始也不了解awk里的gsub的用法, 但看你的结果, 显然$1不是特指开始的那个位置, 而是之那个位置上的数字。所以, 在gsub里的$1前加个表示行首的"^"就成了
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.
头像
jioyo源
帖子: 3476
注册时间: 2008-10-08 13:48

Re: 出现不明错误???

#4

帖子 jioyo源 » 2009-04-26 23:43

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内的意义不会变呀……
--------------------------------------
论坛精华贴全集:http://forum.ubuntu.org.cn/viewtopic.php?f=48&t=199845
book:http://forum.ubuntu.org.cn/viewtopic.php?f=21&t=198286
头像
yjcong
帖子: 2470
注册时间: 2006-02-28 3:11

Re: 出现不明错误???

#5

帖子 yjcong » 2009-04-27 1:32

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
.
.
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.
头像
jioyo源
帖子: 3476
注册时间: 2008-10-08 13:48

Re: 出现不明错误???

#6

帖子 jioyo源 » 2009-04-27 1:45

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
我也不知道为什么,所以才求助呀,错在哪里呢……
--------------------------------------
论坛精华贴全集:http://forum.ubuntu.org.cn/viewtopic.php?f=48&t=199845
book:http://forum.ubuntu.org.cn/viewtopic.php?f=21&t=198286
头像
yjcong
帖子: 2470
注册时间: 2006-02-28 3:11

Re: 出现不明错误???

#7

帖子 yjcong » 2009-04-27 1:57

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内的意义不会变”, 应该找几个例子吧
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.
头像
jioyo源
帖子: 3476
注册时间: 2008-10-08 13:48

Re: 出现不明错误???

#8

帖子 jioyo源 » 2009-04-27 10:17

: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
--------------------------------------
论坛精华贴全集:http://forum.ubuntu.org.cn/viewtopic.php?f=48&t=199845
book:http://forum.ubuntu.org.cn/viewtopic.php?f=21&t=198286
头像
yjcong
帖子: 2470
注册时间: 2006-02-28 3:11

Re: 出现不明错误???

#9

帖子 yjcong » 2009-04-27 10:46

gsub(regular expression, substitution string, target string)

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

awk -F "|" '{getline i <file_2;gsub("^"$1,i,$0);print $0>FILENAME}' file_1
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.
头像
jioyo源
帖子: 3476
注册时间: 2008-10-08 13:48

Re: 出现不明错误???

#10

帖子 jioyo源 » 2009-04-27 18:44

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/也不行,这是为什么??
--------------------------------------
论坛精华贴全集:http://forum.ubuntu.org.cn/viewtopic.php?f=48&t=199845
book:http://forum.ubuntu.org.cn/viewtopic.php?f=21&t=198286
头像
yjcong
帖子: 2470
注册时间: 2006-02-28 3:11

Re: 出现不明错误???

#11

帖子 yjcong » 2009-04-27 22:00

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会节省些运行的消耗
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.
回复