分页: 1 / 1
问一个awk中的if和else问题,想了很久,看了很久,还是不太明白
发表于 : 2011-08-31 23:39
由 jiangkia
student文档里面内容如下:
jk,man,24,1361620
spl,woman,24,1386242
argv.argc文档里面内容如下:
#!/usr/bin/awk -f
BEGIN {
FS=",";
for(i=0;i<ARGC;i++){
print ARGV
}
if(ARGC>2){
print "hello world"
name=ARGV[2]
}
else{
print "Please input name:"
getline name< "-"
}
}
{
if(name ~ $1){
print $1,$4
}
else{
print "no this people"
}
}
当我输入 ./argv.argc student jk时,结果应该只输出:
awk
student
jk
hello world
jk 1361620
但为什么实际结果输出多了else里面语句:
awk
student
jk
hello world
jk 1361620
no this people
谢谢你指点下。
Re: 问一个awk中的if和else问题,想了很久,看了很久,还是不太明白
发表于 : 2011-09-01 0:04
由 我就是我2
不管你是./foo student spl 还是./foo student jk
总有一个不匹配的.前面的输入中,no...在前,后面的no...在后.
awk要处理每一行.
可以改变name的值来测试结果.
代码: 全选
name=ll;awk -F',' '{ if($1=="'"$name"'") {print $1,$4} else {print "error"} }' student
awk 默认处理每一行,
依照你的那个程序,想做的是这样.
若匹配 1行/n行的第一域, 打印匹配行指定域内容.
若搜索遍所有行的第一域都不匹配,则打印错误信息.
但是你后面的那个if else达不到这个目的.
Re: 问一个awk中的if和else问题,想了很久,看了很久,还是不太明白
发表于 : 2011-09-01 10:32
由 我就是我2
我现在不懂awk的高级用法.只能用用shell先了.
[bash]#!/bin/bash
# 文件名foo
filename=$1
name=$2
if [ $# -lt 2 ];then
read -p "input name:" name
fi
awk -F',' '{print $1}' $filename | grep "^$name$">/dev/null
if [ $? -eq 0 ];then
awk -F',' '($1=="'"$name"'"){print $1,$4}' $filename
else
echo "there's no $name in file $filename"
fi
[/bash]
代码: 全选
for i in {jk,spl,ll};do ./foo student $i;done
输出结果
jk 1361620
spl 1386242
there's no ll in file student
Re: 问一个awk中的if和else问题,想了很久,看了很久,还是不太明白
发表于 : 2011-09-01 18:57
由 jiangkia
还是要谢谢你了
Re: 问一个awk中的if和else问题,想了很久,看了很久,还是不太明白
发表于 : 2011-09-01 19:55
由 sk1418
先说下,你把代码放code里看的多清楚阿。
你的代码里,下面这段方在了awk的BEGIN block里,而且后面没改那么name就定死了。然后你用这个去匹配文件里的每一行,结果就是所有name不是你给定的那个值的行,都会打印一遍no this person.。
代码: 全选
if(ARGC>2){
print "hello world"
name=ARGV[2]
}
else{
print "Please input name:"
getline name< "-"
}
解决这个可以考虑不用
代码: 全选
else{
print "no this people"
}
而是把匹配到的记录先不打印,先保存起来,最后在END里,看保存的记录,如果有记录就打印,没有就打印no this person
Re: 问一个awk中的if和else问题,想了很久,看了很久,还是不太明白
发表于 : 2011-09-01 21:21
由 fnan
./argv.argc student jk
#awk 把参数当文件处理,读完student就会尝试读jk,也要解决。