Зацикливание через csv, удаление шаблонов

У меня вопрос, похожий на мой предыдущий вопрос, но немного отличается

, что у вас есть 10 столбцов в каждой строке и 100000 строк, я хочу проверить, есть ли каждая строка для следующих шаблонов: [ ! d2]

Если строка выглядит так, я хочу удалить ее

 lambda a, b, c, d: a==a and a+1==b and b+1==c and c+1==d and d+1==e

. Хотя это решение отлично работает, все решения работали, все следовали одной и той же логике. Проблема состоит в том, что, скажем, у меня есть 10 строк. Это решение удаляет строки с 5 последовательными номерами, начиная с a до e,

. Если последовательность начинается с b до f, она останется

[d6 ] Я хочу решение, которое управляется циклом, поэтому мне не нужно будет добавлять и удалять переменные

Я имею в виду, что я хочу удалить все последовательности больше 3, в строке, [!d7 ]

Я имею в виду, что если в строке есть 3 последовательных числа, a==a and a+1==b and b+1==c оставляют их, если есть более трех последовательных номеров a==a and a+1==b and b+1==c and c+1==d and so on, тогда удалите их, где бы они ни возникали.

Я имею в виду, что это может быть

a==a and a+1==b and b+1==c and c+1==d

a==a and a+1==a and b+1==c and c+1==d and d+1==e and e+1==f

and so on

Поэтому я бы предпочел сделать это в цикле или аналогичном решении, поэтому мне не нужно писать все возможности [!d10 ]

Как и в прошлый раз, я бы предпочел awk или perl для учебных целей, мне сказал друг, что haskell может сделать это легко, но я не нашел решение в haskell, если это правда, тогда мне любопытно знать.

Обратите внимание, что я не против рекурсивных решений. Я отредактирую свой вопрос, чтобы дать пример ввода и вывода за несколько часов, когда я вернусь домой

EDIT

пример ввода

1,2,3,4,5,6,7,8,9
1,5,8,11,14,16,17,18,19
1,2,3,5,7,9,15,29,34
11,22,25,30,40,55,80,83,90

ожидаемый вывод [ ! d16]

1,2,3,5,7,9,15,29,34
11,22,25,30,40,55,80,83,90

Причина: третья строка содержит только 3 последовательных номера, четвертая строка, не содержит последовательных чисел. первые две строки должны быть удалены.

1
задан 13 April 2017 в 15:23

1 ответ

Perl: (после повторного добавления примеров к вопросу)

из командной строки:

perl -F, -ane'my($a,$b)=$F[0];$b=$b>($l=$a++==$_?$l+1:0)?$b:$l for@F;print if $b>5' \
file.txt

, если вы хотите изменить файл, используйте кнопку -i флаг для версии командной строки или использовать оператор перенаправления вашей оболочки (>, не используйте его в том же файле, потому что он будет усечен до того, как он будет прочитан!).

1
ответ дан 24 May 2018 в 03:13
  • 1
    ОК спасибо, сэр, я завтра проведу ваше решение, чтобы посмотреть, как это работает, и я редактировал свой вопрос, чтобы включить примеры, если мой вопрос был неясным – Lynob 3 October 2014 в 00:56
  • 2
    О, я неправильно понял ваш вопрос, я думал, что только начало было интересным. – Patrick J. S. 3 October 2014 в 00:59
  • 3
    Нет, в этом случае ответы на мой предыдущий вопрос будут работать хорошо, что плохо для этих решений, так это то, что они не будут удалять все, последовательности, мне нужно продолжать менять сценарий и запускать его снова – Lynob 3 October 2014 в 01:07
  • 4
    отредактированный, должен работать сейчас. Может быть, я напишу объяснение завтра, так как сценарий полностью изменился. – Patrick J. S. 3 October 2014 в 02:50

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

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