Свертывание последовательности чисел, разделенных запятыми, в начало -Конец

Похоже, документация, которую я использовал в качестве справочной, может быть неточной или устаревшей (возможно, поддержка +, ! и т. д. была удалена ). На стороне сервера man systemd.serviceупоминается только «-». Однако было бы здорово, если бы кто-нибудь это подтвердил.

3
28.04.2021, 13:54
1 ответ

Сохраните это как range.awk.

{
    for(i=2;i<=NF+1;i++){     #Visit each number from the 2nd on
        if($i==$(i-1)+1){
            if(f=="")f=$(i-1) #Candidate to first number of a range
            continue
        }
        printf("%s%s%s%s", f, (f!="" ? "-" : ""), $(i-1), (i>NF ? RS : FS))
        f="" #Unset the candidate
    }
}

Запустить:awk -F, -f range.awk.

Или скопируйте -вставьте свернутый -вкладыш:

awk -F, '{for(i=2;i<=NF+1;i++){if($i==$(i-1)+1){if(f=="")f=$(i-1);continue}printf("%s%s%s%s",f,f!=""?"-":"",$(i-1),i>NF?RS:FS);f=""}}'

Я не стал жестко кодировать разделитель полей, поэтому его нужно указать с помощью -F.

Примеры выходных данных:

$ awk -F, -f range.awk <<< 32,33,34,35,36,37,38,39,96,97,98,99,100,101,102,103
32-39,96-103
$ awk -F, -f range.awk <<< 0,1,2,5,8,9,11
0-2,5,8-9,11
$ awk -F, -f range.awk <<< 4
4
2
28.04.2021, 22:50

Теги

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