-8

ある行から次の行に増加しない値を出力 (または行を特定) したいと考えています。

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

4 に答える 4

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
于 2013-11-06T15:50:43.067 に答える
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
于 2013-11-06T15:58:19.913 に答える