Как я могу генерировать последовательность таких номеров?

Вот функция для удаления компонента PATH, которая, как мне кажется, обрабатывает все крайние случаи. (Даже злые с пустыми компонентами.)

remove_from_PATH () {
  while case $PATH in
          "$1") unset PATH; false;;
          "$1:"*) PATH=${PATH#"$1:"};;
          *":$1") PATH=${PATH%":$1"};;
          *":$1:"*) PATH=${PATH%%":$1:"*}:${PATH#*":$1:"};;
          *) false;;
        esac
  do
    :
  done
}

remove_from_PATH ~/mypython

В zsh проще использовать массив path.

path=("${(@)path:#"$HOME/mypython"}")

Обратите внимание, что вы не должны изменять PATH в .bashrc.

1
13.01.2019, 23:23
3 ответа

Вывести последовательность «вручную» с помощью

i=0
while [ "$i" -lt 1000000 ]; do
    printf '%d %d\n' "$(( i+1 ))" "$(( i += 40000 ))"
done

или

for (( i = 1; i < 1000000; i += 40000 )); do
    printf '%d %d\n' "$i" "$(( i + 39999 ))"
done

или что-то в этом роде.

Или pasteвместе две отдельные последовательности изseq:

$ paste <( seq 1 40000 1000000 ) <( seq 40000 40000 1000000 )
1       40000
40001   80000
80001   120000
120001  160000
160001  200000
200001  240000
240001  280000
280001  320000
320001  360000
360001  400000
400001  440000
440001  480000
480001  520000
520001  560000
560001  600000
600001  640000
640001  680000
680001  720000
720001  760000
760001  800000
800001  840000
840001  880000
880001  920000
920001  960000
960001  1000000

Предложено JdeBP в комментариях:

jot - 1 1000000 40000 | awk '{ print $1, $1+39999 }'

, но по существу это то же самое, что и второй цикл вверху, и, поскольку seqболее доступен на машинах Linux,(jotизначально является утилитой BSD, а seqявляется частью GNU coreutils ), и наиболее частым посетителем здесь является пользователь Linux, и вопрос был отмечен тегом , его может быть более полезно написать как

seq 1 40000 1000000 | awk '{ print $1, $1+39999 }'
4
27.01.2020, 23:11

Думаю, это можно сильно упростить,

for i in $(seq 0 24); do
  printf "$(($i * 40000 + 1)) $((($i+1) * 40000))\n";
done;

1 40000
40001 80000
80001 120000
120001 160000
160001 200000
200001 240000
240001 280000
280001 320000
320001 360000
360001 400000
400001 440000
440001 480000
480001 520000
520001 560000
560001 600000
600001 640000
640001 680000
680001 720000
720001 760000
760001 800000
800001 840000
840001 880000
880001 920000
920001 960000
960001 1000000
2
27.01.2020, 23:11

Наслаждайтесь одним AWKвыражением:)

awk 'BEGIN{ while (c < 1000000) print (++c, c += 39999) }'
  • ++c-до приращение переменной

Выход:

1 40000
40001 80000
80001 120000
120001 160000
160001 200000
200001 240000
240001 280000
280001 320000
320001 360000
360001 400000
400001 440000
440001 480000
480001 520000
520001 560000
560001 600000
600001 640000
640001 680000
680001 720000
720001 760000
760001 800000
800001 840000
840001 880000
880001 920000
920001 960000
960001 1000000
4
27.01.2020, 23:11

Теги

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