查找具有特定条件的行的NR(使用下一行)

时间:2016-01-21 14:36:32

标签: awk

伙计们我有这样的文件

NR   column
1    1
2    1
3    0
4    0
5    0
6    1
7    1
8    1
9    1
10   0
11   0
12   0
13   1
14   1

我需要的是找到NR会告诉我哪里有1。

所以我的理想输出应该告诉我NR = 1 - 2(然后是1,然后),NR = 6 - 9,NR = 13 - 14

1
2
6
9
13
14

因为,我认为在输出中第一行和最后一行更容易考虑。我希望输出是

2
6
9
13

我一直在尝试使用getline,但没有成功。 我确信有一种简单的方法可以帮助你吗?

由于

5 个答案:

答案 0 :(得分:2)

假设您的输出不正确(并且它应该是0/1或1/0转换发生的行号 - 因此行将是:" 1,3,6,10,13&# 34;),然后一个awk oneliner是:

awk 'prev!=$0{print NR};{prev=$0}' file

说:

  • 对于与prev行不匹配的每一行,打印行号和
  • 每行
  • ,保存prev行

答案 1 :(得分:2)

$ awk 'NR>1 && $0!=prev{print NR} {prev=$0}' file
3
6
10
13

或您的更新要求:

$ awk '$1!=prev{print NR-prev} {prev=$1} END{if (prev) print NR}' file
1
2
6
9
13
14

答案 2 :(得分:1)

{
  if (NR > 1 && last != $0) {
    print NR;
  }
  last = $0;
}

答案 3 :(得分:1)

awk救援!

$ awk '!p&&$2==1{p=$1}
          p&&!$2{print p"-"($1-1);p=0} 
             END{if(p) print p"-"$1}' file
1-2
6-9
13-14

答案 4 :(得分:1)

另一种方式

awk '$2!=x{x=$2;print NR-!($2)}END{if(x)print NR}' file

1
2
6
9
13
14