仅查找从一行到下一行的增加值

时间:2013-11-06 15:48:15

标签: python perl bash sed awk

我想打印出 not 从一行增加到下一行的值(或识别行)。

Perl,Awk / Sed,bash或python ......任何人都会这样做。

1001<br>
1002<br>
1003<br>
1004<br>
1005<br>
1006<br>
1007<br>
1004<br>
1008<br>
1009<br>

这应该从“1007”到下一行“1004”,并识别一行或另一行或两者。

4 个答案:

答案 0 :(得分:3)

这可以是一种方式:

awk 'prev>=$1 {print $0, "<----"; a[$1]=NR; next} prev=$1;
    END{print "** repeated lines **";
        for (i in a) print "line "a[i]" value",i; printf "\n"}' file

测试

$ awk 'prev>=$1 {print $0, "<----"; a[$1]=NR; next} prev=$1; END{print "** repeated lines **"; for (i in a) print "line "a[i]" value",i; printf "\n"}' a
1001
1002
1003
1004
1005
1006
1007
1004 <----
1008
1009
** repeated lines **
line 8 value 1004

使用其他输入:

$ cat a
1006
1007
1004
1008
1009
133
1333
123
$ awk 'prev>=$1 {print $0, "<----"; a[$1]=NR; next} prev=$1; END{print "** repeated lines **"; for (i in a) print "line "a[i]" value",i; printf "\n"}' a
1006
1007
1004 <----
1008
1009
133 <----
1333
123 <----
** repeated lines **
line 8 value 123
line 6 value 133
line 3 value 1004

答案 1 :(得分:3)

如果您有sort,它可以满足您的所有需求。使用选项-c检查手册页。

例如,您的数据:

kent$  echo "1001
1002
1003
1004
1005
1006
1007
1004
1008
1009"|sort -c
sort: -:8: disorder: 1004

所以你得到了行号和那行。

答案 2 :(得分:2)

Perl解决方案:

perl -ne 'print $previous if $_ < $previous; $previous = $_' input.txt

请记住上一行,比较,打印(如果需要)。

答案 3 :(得分:0)

使用来自@ fedorqui解决方案的数据的基于Python的解决方案:

>>> from itertools import tee, izip
with open('abc1') as f:
    t1, t2 = tee(f)
    next(t2)
    for line1, line2 in izip(t1, t2):
        if int(line1) > int(line2):
            print line1, line2
...             
1007
1004

1009
133

1333
123