免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3576 | 回复: 12
打印 上一主题 下一主题

请问awk是否可以识别传递进入awk里头的数值参数? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-04-05 16:17 |只看该作者 |倒序浏览
我遇到一个很奇怪的问题,就是数值参数传递进入awk后,似乎awk不能很好的识别成数值,否则下面的执行结果该如何解释呢?
这个shell里头我想把给定的数值传递入awk里头,这里给的是100和1400,希望能够截取第三列从100到1400的所有行,但是结果是漏掉了许多行,请问这是什么原因造成的,谢谢!!

#!/bin/sh
echo "lease enter the number and press the enter button."
echo "the number :\c"
read n
lcount=1
   while [ $lcount -le $n ]
    do
echo "enter the Fsp,Lsp and the linename for the line$lcount :\c"
read Fsp Lsp lname
echo "$Fsp"  "$Lsp"  $lname
awk '{if ($3>"'$Fsp'") {if ($3<"'$Lsp'") {if( $4=="'$lname'" ) {print $0 }}}}' infile
lcount=`expr $lcount + 1`
  done
exit

以下是运行结果,第三列从140到1000漏掉了许多行!!!!!!!!!!!
sgi44% ./navigation
Please enter the number and press the enter button.
the number :1
enter the Fsp,Lsp and the linename for the line1 :100.0 1400.0 C-44x
100.0 1400.0 C-44x
      27966.50     999642.50     120.0   C-44x        
      27639.50     999245.75     140.0   C-44x        
      12408.69     984074.00   1000.0   C-44x        
      12052.41     983739.25   1020.0   C-44x        
      11695.69     983373.75   1040.0   C-44x        
      11339.00     983008.00   1060.0   C-44x        
      10953.19     982673.62   1080.0   C-44x        
      10596.50     982308.12   1100.0   C-44x        
      10269.50     981973.00   1120.0   C-44x        
      09942.50     981637.75   1140.0   C-44x        
      09586.00     981303.12   1160.0   C-44x        
      09258.69     980937.25   1180.0   C-44x        
      08902.19     980602.50   1200.0   C-44x        
      08545.50     980237.12   1220.0   C-44x        
      08159.19     979871.75   1240.0   C-44x        
      07802.50     979506.25   1260.0   C-44x        
      07445.59     979140.75   1280.0   C-44x        
      07059.31     978775.62   1300.0   C-44x        
      06732.19     978440.62   1320.0   C-44x        
      06375.31     978075.12   1340.0   C-44x        
      06018.81     977740.38   1360.0   C-44x        
      05661.91     977375.00   1380.0   C-44x

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-04-05 16:39 |只看该作者

请问awk是否可以识别传递进入awk里头的数值参数?

'"$var"'
example:
a=100;b=1000
awk 'NR>'"$a"'&&NR<'"$b"'' file

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
3 [报告]
发表于 2005-04-05 16:46 |只看该作者

请问awk是否可以识别传递进入awk里头的数值参数?

你的双引号用反了

论坛徽章:
0
4 [报告]
发表于 2005-04-05 16:49 |只看该作者

请问awk是否可以识别传递进入awk里头的数值参数?

谢谢  寂寞烈火 ,  你可能误会了,我文件的第三列数值并不是一定和其行数NR相等哦!!!

论坛徽章:
0
5 [报告]
发表于 2005-04-05 16:52 |只看该作者

请问awk是否可以识别传递进入awk里头的数值参数?

to: waker  ,    我传递进awk 里头的 变量 似乎没有用错“双引号”吧?
应该是双引号在外头,单引号在里头,对不?

论坛徽章:
0
6 [报告]
发表于 2005-04-05 17:23 |只看该作者

请问awk是否可以识别传递进入awk里头的数值参数?

没有人回答我,那自个顶一吧!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2005-04-05 17:25 |只看该作者

请问awk是否可以识别传递进入awk里头的数值参数?

原帖由 "寂寞烈火" 发表:

'"$var"'
example:
a=100;b=1000
awk 'NR>'"$a"'&&NR<'"$b"'' file

论坛徽章:
0
8 [报告]
发表于 2005-04-06 14:26 |只看该作者

请问awk是否可以识别传递进入awk里头的数值参数?

不行,根本不行,我觉得awk只是把传进去的参数当作字符串来认,而不是当作数值来认,这样我根本不能将传进去的参数作比较啊!!!
怎么办,有没有人帮帮我??

论坛徽章:
0
9 [报告]
发表于 2005-04-06 15:10 |只看该作者

请问awk是否可以识别传递进入awk里头的数值参数?

烈火他们已经指出你的问题了---传入的变量是被你自己强制为字符串的. :wink:
样例文件:
[kennyyu@haha shellTestRoom]$ cat data.f
48      Dec     3BC1977 LPSX    68.00   LVX2A   138
483     Sept    5AP1996 USP     65.00   LVX2C   189
47      Oct     3ZL1998 LPSX    43.00   KVM9D   512
219     dec     2CC1999 CAD     23.00   PLV2C   68
484     nov     7PL1996 CAD     49.00   PLV2C   234
483     may     5PA1998 USP     37.00   KVM9D   644
216     sept    3ZL1998 USP     86.00   KVM9E   234


两种不同的结果比较:

[kennyyu@haha shellTestRoom]$ min=200;max=500;awk '{if ($1<"'${max}'"&&$1>"'${min}'") print $0}' data.f
48      Dec     3BC1977 LPSX    68.00   LVX2A   138
483     Sept    5AP1996 USP     65.00   LVX2C   189
47      Oct     3ZL1998 LPSX    43.00   KVM9D   512
219     dec     2CC1999 CAD     23.00   PLV2C   68
484     nov     7PL1996 CAD     49.00   PLV2C   234
483     may     5PA1998 USP     37.00   KVM9D   644
216     sept    3ZL1998 USP     86.00   KVM9E   234

[kennyyu@haha shellTestRoom]$ min=200;max=500;awk '{if ($1<'${max}'&&$1>'${min}') print $0}' data.f
483     Sept    5AP1996 USP     65.00   LVX2C   189
219     dec     2CC1999 CAD     23.00   PLV2C   68
484     nov     7PL1996 CAD     49.00   PLV2C   234
483     may     5PA1998 USP     37.00   KVM9D   644
216     sept    3ZL1998 USP     86.00   KVM9E   234

论坛徽章:
0
10 [报告]
发表于 2005-04-06 17:18 |只看该作者

请问awk是否可以识别传递进入awk里头的数值参数?

谢谢楼上各位哦,我查了好多以前的帖子,就是没搞懂“字符串和数值”这个问题,现在弄明白了,谢谢哦,呵呵。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP