2

我有一个如下数字列表:

1  0/1
2  1/1
3  1/1
4  1/1
5  1/1
6  1/1
7  0/1
8  0/1

如果连续行的第 2 列是“1/1”,我想报告位置的开始和结束,比如在这里,应该是:2-6

如果需要,我应该如何应用一些简单的 bash 代码或 python 来做到这一点?

非常感谢

4

2 回答 2

2

如果您能够在 python 中编码,则可以通过以下方式解决它:

  1. 阅读您的文件。
  2. 仅当第二个数字为 时,才使用正则表达式创建包含第一个数字的列表1/1
  3. 按范围对列表进行分组。(提示

所以代码看起来像:

import re

# step 1
with open('filename') as f:
    data = f.read()

# step 2
list = re.findall(r'(\d+)\s+1/1', data)

# step 3
# Check the link in the description of the algorithm
于 2012-11-05T21:40:29.083 回答
0

重击解决方案:

#! /bin/bash
unset in                                 # Flag: are we inside an interval?
unset last                               # Remember the last position.
while read p f ; do
    if [[ $f = 1/1 && ! $in ]] ; then    # Beginning of an interval.
        echo -n $p-
        in=1
    elif [[ $f = 1/1 && $in ]] ; then    # Inside of an interval.
        last=$p
    elif [[ $f != 1/1 && $in ]] ; then   # End of an interval.
        echo $last
        unset in
    fi
done
于 2012-11-05T22:01:44.533 回答