伙计们我有这样的文件
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,但没有成功。 我确信有一种简单的方法可以帮助你吗?
由于
答案 0 :(得分:2)
假设您的输出不正确(并且它应该是0/1或1/0转换发生的行号 - 因此行将是:" 1,3,6,10,13&# 34;),然后一个awk oneliner是:
awk 'prev!=$0{print NR};{prev=$0}' file
说:
答案 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