Поиск последовательности числа

скажите, что у Вас есть file1.csv, содержащий 5 миллионов строк, каждая строка имеет 8 случайных чисел, разделенных запятой. И у Вас есть эта последовательность 7,152,13,11,42,5,7

Как произвести строки в file1.csv, содержащем 3 или больше числа от той последовательности наряду с номером строки?

2
задан 13 August 2015 в 21:14

2 ответа

Интересный. Я использовал бы awk

awk -F, -v seq="7,152,13,11,42,5,7" '
    BEGIN {
        n = split(seq, a)
        for (i=1; i<=n; i++) num[a[i]]=1
    }
    { 
        n=0
        for (i=1; i<=NF; i++) { 
            if ($i in num) n++
            if (n == 3) {
                print
                break
            }
        }
    }
' bigfile

Очевидно, жемчуг является намного более кратким

export seq="7,152,13,11,42,5,7"
perl -F, -lane '
    BEGIN {%nums = map {$_ => 1} split /,/, $ENV{seq}} 
    print if scalar(grep {exists $nums{$_}} @F) >= 3
' file
3
ответ дан 2 December 2019 в 01:45

Вот python сценарий, чтобы сделать задание:

#!/usr/bin/env python2
nums = set('7,152,13,11,42,5,7'.split(','))
with open('/path/to/file.txt') as f:
    f = enumerate(f, start=1)
    for i, line in f:
        if len(set.intersection(nums, set(line.split(',')))) >= 3:
            print str(i) + ': ' + line.rstrip()
  • set, nums будет содержать числа, которым мы хотим соответствовать

  • , Мы создали enumerate, объект получить номер строки и выполнить итерации по строкам

  • set.intersection(nums, set(line.split(','))) получает нас общие числа среди от nums и line

  • , Если существует 3 или больше числа от той последовательности, происходят в строке if len(....) >= 3, то номер строки и строка будут распечатаны.

вывод будет похож:

1: 7,152,13,11,42,5,45
2: 7,152,1,5,7,34,44
3: 7,152,13,11,42,5,7
5: 11,42,5,7,7,152,13

Также рассмотрение чисел не должно существовать точного упомянутого порядка, они могут существовать любого порядка.

3
ответ дан 2 December 2019 в 01:45

Другие вопросы по тегам:

Похожие вопросы: