Как прочитать и разобрать вводимые пользователем данные, заданные в виде списка или диапазона номеров

Это разрешения на файлы. Сначала разделите их на группы по три.

-w- rw- --x  r-- -wx rwx

Теперь посчитайте разрешения в восьмеричной форме.

-w- = 0 + 2 + 0 = 2
rw- = 4 + 2 + 0 = 6
--x = 0 + 0 + 1 = 1

r-- = 4 + 0 + 0 = 4
-wx = 0 + 2 + 1 = 3
rwx = 4 + 2 + 1 = 7

Теперь у вас есть несколько чисел:

261 437

Надеюсь, это приблизит вас к кэшу.

2
20.08.2018, 13:26
3 ответа

Сначала разделите по запятым/пробелам, прокрутите результаты, затем разделите по тире, чтобы получить начало и конец диапазона:

$ cat ranges.sh
#!/bin/bash    
IFS=', ' read -a ranges <<< "$*"
for range in "${ranges[@]}"; do
        IFS=- read start end <<< "$range"
        [ -z "$start" ] && continue
        [ -z "$end" ] && end=$start
        for (( i=start ; i <= end ; i++ )); do
                echo "$i"
        done
done
$ bash ranges.sh 1-3,5 9-10
1       
2               
3       
5
9
10

Это может быть связано с лучшей проверкой работоспособности и т. д.

2
27.01.2020, 21:55

Попробуйте также

T="$@"
echo {1..100} | { cut -d" " -f"${T// /,}"; }
2
27.01.2020, 21:55

Придумал вариант Awk

awk -v RS='[[:blank:]]|[\n]|[,]' '{max=a[split($0, a,"-")]; if(max!=0){while(a[1]<=max){print a[1]++}}}' /tmp/a.txt

Чтение ввода с разделителями как записи, Разделение его на массив с помощью "-" Записи без "-" сохраняются в первом индексе Наконец печать значений.

Вход:

1-3,5 6

Выход:

1
2
3
5
6
2
27.01.2020, 21:55

Теги

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