LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2652|回复: 4

awk如何用NR指定工作范围

[复制链接]
发表于 2007-5-16 17:25:09 | 显示全部楼层 |阅读模式
我看awk使用手册利用NR内置变量指定了工作范围
awk -F % 'NR==7,NR==15 {printf $1 $3}' mydoc

那写成程序形式要怎么加进去呢,比如说
#!/bin/awk -f
BEGIN {n = 1}
    {
        { if ( n%3 == 1)
                {printf ("%f"\t", $4);}
           else {if (n%3 == 2)
                      {printf("%f", $4);}
                  }
         }
         n++;
     }
END {}
发表于 2007-5-16 21:48:25 | 显示全部楼层
NR%3 ==1 {printf ("%f"\t", $4);}
NR%3 == 2{printf("%f", $4)}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-17 12:51:20 | 显示全部楼层
我的意思是说处理一个文本文件里的部分记录
比如1~100行记录需要处理
其中又只有1,2,4,5,7,8...行记录的第4字段需要输出(就是3的倍数行不处理输出,忽略掉),所以我写了上面的代码

现在就是说指定只处理到100行就停止处理,后面的记录不需要了,怎么指定

比如
awk -F % 'NR==7,NR==15 {printf $1 $3}' mydoc
就只把7-15行记录的1,3字段输出
回复 支持 反对

使用道具 举报

发表于 2007-5-17 22:41:03 | 显示全部楼层
难道这不能实现你所要的? 有NR为什么还要自己做n++

NR > 100 {exit }
NR%3 ==1 {printf ("%f"\t", $4);}
NR%3 == 2{printf("%f", $4)}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-17 23:08:47 | 显示全部楼层
谢谢了,不是很熟悉这个,所以一般都是照着有的例子改

以前做处理都把要处理部分拷出来单独存成一个文本,后来看到那一句,但是又不知道如果处理复杂点儿要怎么加进去
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表