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