Я пытаюсь найти самую длинную последовательность цифр из строки в bash, используя только awk
. Я сформировал следующую команду, и она дает мне результат.Поиск самой длинной последовательности цифр из строки в bash с использованием только awk
$ echo "This_is_1234_and_44448888_1234567_111111_23456789_and_234" | sed 's/./\n&/g' | awk 'BEGIN{max_length=0} { tmp=match($1,/[0-9]/) ; if (tmp) { numbers[i]=numbers[i]$0;non_digit=0;} else if (non_digit<1) { non_digit=2 ;i++; } } END { i=0; for (key in numbers) { current_length=length(numbers[key]); if (current_length > max_length) { max_length = current_length; i = 0;} if (current_length >= max_length) {i++; max_length_strings[i] = numbers[key];} } print "max_length for the consecutive number portion is ",max_length; for (j in max_length_strings) { print "String_Part: " max_length_strings[j] " and Length: " max_length; }}'
max_length for the consecutive number portion is 8
String_Part: 23456789 and Length: 8
String_Part: 44448888 and Length: 8
Но для получения каждого символа из строки для проверки цифр, я использую sed
команду.
Так как я могу избежать этого использования sed и добиться того же результата, используя одну команду awk
?
могли бы вы объяснить немного, как код работает с RS –
Добавлено объяснение в ответ. – anubhava
Вы должны упомянуть о специфике gawk из-за многосимвольного RS. –