假设你有这样的文件:
Rowname
useless number
useless number
1596 1787
1595 1787
1594 1787
1565 1803
1565 1804 我知道如何让awk跳过useless number和awk行5和6,基于Rowname。但是,如果与前一行的差异仅为1,我如何告诉awk跳过行?产出应是:
1596 1787
1565 1803我的问题是,在某些情况下,我得到了这个:
1595 1787
1594 1787另一种说法是:我总是想要行名中的第3行,但如果与第3行的区别仅为1(或2或3),则不需要第4行(或5或6行)。
这有意义吗?
发布于 2013-11-08 04:34:18
如果要打印“Rowname”,这似乎符合您的要求;如果没有,则在脚本的第一行中省略print:
$ 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
$发布于 2013-11-08 02:45:11
这可能会成功
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.txthttps://stackoverflow.com/questions/19850614
复制相似问题