首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >先进使用awk

先进使用awk
EN

Stack Overflow用户
提问于 2013-11-08 02:35:26
回答 2查看 162关注 0票数 0

假设你有这样的文件:

代码语言:javascript
复制
Rowname  
useless number  
useless number  
1596 1787  
1595 1787  
1594 1787  
1565 1803  
1565 1804  

我知道如何让awk跳过useless number和awk行5和6,基于Rowname。但是,如果与前一行的差异仅为1,我如何告诉awk跳过行?产出应是:

代码语言:javascript
复制
1596 1787  
1565 1803

我的问题是,在某些情况下,我得到了这个:

代码语言:javascript
复制
1595 1787  
1594 1787

另一种说法是:我总是想要行名中的第3行,但如果与第3行的区别仅为1(或2或3),则不需要第4行(或5或6行)。

这有意义吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-08 04:34:18

如果要打印“Rowname”,这似乎符合您的要求;如果没有,则在脚本的第一行中省略print

代码语言:javascript
复制
$     awk '/^Rowname/         { nr=NR; print; next }
>          NR==nr+1||NR==nr+2 { next }
>          NR==nr+3           { v1=$1; print; next }
>                             { if (abs(v1-$1) > 1) print; v1=$1; }
>          function abs(x)    { return (x < 0) ? -x : x }
>         ' data
Rowname
1596 1787
1565 1803
$
票数 1
EN

Stack Overflow用户

发布于 2013-11-08 02:45:11

这可能会成功

代码语言:javascript
复制
awk '#print line 4
     NR == 4;
     #print any line that meets the "sum" comparison condition
     NR > 4 && ($1 + $2 - prev_sum != -1) && ($1 + $2 - prev_sum != 1);
     #set the sum for this line into a variable
    {prev_sum=$1 + $2}' file.txt
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19850614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档