Цикличное выполнение через csv, удаляя шаблоны

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

скажите, что у Вас есть 10 столбцов на каждой строке и 100 000 строк, я хочу проверить если каждая строка на следующие шаблоны:

Если строка похожа на это, я хочу удалить ее

 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 последовательных чисел, запускающихся от до e,

Если последовательность запустится от b до f, то это останется

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

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

Я подразумеваю это, если существует 3 последовательных числа в строке, a==a and a+1==b and b+1==c оставьте их, если существует больше чем 3 последовательных числа 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

Таким образом, я быть бы, чтобы сделать это в цикле или аналогичном решении, таким образом, я не должен писать все возможности

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

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

Править

пример вводится

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

ожидаемый вывод

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

2 ответа

протестированный:

awk -F, '{
    for (i=1; i<=NF-3; i++) 
        if ($i+1==$(i+1) && $i+2==$(i+2) && $i+3==$(i+3))
            next
    print
}' file
3
ответ дан 3 December 2019 в 07:05

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
ответ дан 3 December 2019 в 07:05

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

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