2012-11-05 81 views
2

連續數搜索從一組數字我有號碼的列表如下圖所示:如何使用bash或蟒蛇

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?

千恩萬謝

+0

我完全不知道這樣的問題... – user815408

+0

你不能,例如,找到第一個「1/1」事件的索引,並計算你必須提前多少次搜索,直到它不是*「1/1」? – paddy

+0

是第2列唯一可能的值是「0/1」還是「1/1」? –

回答

2

如果你能在Python代碼,你可以解決它通過以下方式:

  1. 閱讀您的文件。
  2. 使用正則表達式創建一個包含第一個數字的列表,僅當第二個數字爲1/1時。
  3. 將範圍分組。 (hint

因此,代碼會看起來像:

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 
+0

非常感謝!它運作良好 – user815408

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