Chinaunix
标题:
使用awk -f a.awk 方式 取得a.awk返回值问题!!求助
[打印本页]
作者:
yangfbi008
时间:
2010-02-05 14:28
标题:
使用awk -f a.awk 方式 取得a.awk返回值问题!!求助
根据
eval $(echo 1231koko12|awk '{j=match($1,"ko");{print "a="j}} ')
echo $a
5
我了解到通过eval 可以得到awk的返回值
可是我现在用 awk -f a.awk $file 结合eval 却不行
请问 awk -f a.awk $file 这种方式怎么在shell取得返回值
作者:
blackold
时间:
2010-02-05 14:41
今天怎么了?都是这种看不懂的贴子。
作者:
iori809
时间:
2010-02-05 14:44
#awkfile
{
print match($0,"ko")
}
=====================
#file
1231koko12
================
#shellscript
#!/bin/bash
var=`awk -f awkfile file`
echo "$var"
不知道是否是你要想要的》?
作者:
yangfbi008
时间:
2010-02-05 14:48
我现在这么写的
eval $( awk -v path=$filepath -f a.awk $file )
报错 说 ( 附近语法错误
我想把 a.awk 中执行的个别数据返回到shell 继续判读
作者:
nigelrax
时间:
2010-02-05 14:54
我明白楼主意思了 等我重启虚拟机啊 呵呵
作者:
nigelrax
时间:
2010-02-05 15:05
cat a.awk
#!/bin/awk -f
{j=match($1,"ko");print j}
——————————————
a=`awk -f a.awk urfile`
echo $a
作者:
iori809
时间:
2010-02-05 15:12
最好不要使用 $()这种形式 用``最好,我们写的那个应该能实现你的需求啊。 非要用那种方法写吗?
作者:
yangfbi008
时间:
2010-02-05 15:13
回复
6#
nigelrax
在a.awk文件中会有很多print出很多数据到终端
而我只想取得两个项目的值 并且我不想打出这两个项目
作者:
yangfbi008
时间:
2010-02-05 15:15
回复
7#
iori809
你们的写法会把所有数据都取出来
但我只想要 两个数据 其他数据则需要打到终端
作者:
iori809
时间:
2010-02-05 15:23
你的意思加入AWK输出3个数据,然后你只想输出两个吗? 给个具体数据看看 吧
作者:
yangfbi008
时间:
2010-02-05 15:34
本帖最后由 yangfbi008 于 2010-02-05 15:38 编辑
比如说
a.awk
BEGIN{
x = 0;
y= 0;
}
{
for (i = 1; i <=NF; i++)
{
print "line " i;
}
x = 1;
y = 1;
}
END
{
### 我想把 x 和 y的值返回到shell里
}
a.sh
eval $( awk -f a.awk $file)
执行这句话后 取得x 和 y的值
是这样的意思
作者:
nigelrax
时间:
2010-02-05 15:40
我用eval $(...)没问题 测试可以得到a的值
作者:
yangfbi008
时间:
2010-02-05 15:45
回复
12#
nigelrax
把证据贴出来
我这怎么报错
作者:
nigelrax
时间:
2010-02-05 15:47
你报的错贴上来
作者:
yangfbi008
时间:
2010-02-05 15:51
我得自己打 我用的另一台机器测试
a.sh : eval: line 20 : syntax error near unexpected token `('
作者:
yangfbi008
时间:
2010-02-05 15:54
你把执行的关键几步也帮我贴出来把
作者:
nigelrax
时间:
2010-02-05 15:54
你最好上那台机子 把你的原始代码贴出来
包括a.sh和a.awk两个文件
因为你举的例子和你的原始文件不同 eval所处理的命令也不同
我的
cat a.awk
#!/bin/awk -f
{j=match($1,"ko");print "a="j}
cat word
jskdffkosf
eval $(awk -f a.awk word)
echo $a
7
作者:
yangfbi008
时间:
2010-02-05 16:03
回复
17#
nigelrax
我试了下你的
还真有
太感谢了
等我研究研究
作者:
justlooks
时间:
2010-02-05 16:14
#cat aa
#!/bin/awk -f
{
j=match($1,"ko")
print "a="j
}
#!/bin/bash
eval `echo "aa"|awk -f aa`
echo $a
# bash bb
0
作者:
yangfbi008
时间:
2010-02-05 16:55
回复
17#
nigelrax
我发现个奇怪的事
你们那种确实没问题
b.sh
eval `awk -f a.awk test.c`
echo $aaa
a.awk
#!/bin/awk -f
BEGIN {
x = 1;
n = 0;
comS = 0;
sunlines = 0;
sehv = 0;
pathout = 0;
}
{
if ($1 == "/*" && $2 == "<s>")
{
n = 0;
if ( pathout == 0 )
{
print path;
pathout = 1;
}
printf(" 123213");
sehv = 1;
x = NR;
}
print "aaa="12345;
}
END {
if (sehv == 1)
{
#print "effective lines: " sunlines;
}
}
就这个代码我试了下
发现只要有除了aaa以外其他的print或者printf就会报错
而且错误都很难理解
现在这个代码的执行结果是
b.sh: line 3: 123213aaa=12345: command not found
如果把这句话 print "effective lines: " sunlines; 的注释取消的并且把printf(" 123213");注视的话
报错是 b.sh: line 3: effective: command not found
所以非常奇怪 很不理解
作者:
justlooks
时间:
2010-02-05 17:04
很好理解啊,你在命令行执行123213aaa=12345就提示找不到这个命令啊
作者:
yangfbi008
时间:
2010-02-05 17:15
给点解决办法
我需要输出其他信息打到屏幕上
作者:
nigelrax
时间:
2010-02-05 17:48
eval $(...)是将括号内命令的输出作为shell命令去执行 你print一个effective lines ,shell就会认为effective是一个系统命令 lines是其参数 所以当然会报错 command not found
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2