(...)
запускает подоболочку и выполняет указанные команды внутри нее. Вот почему ($ num <$ var)
генерирует это сообщение об ошибке; он не может найти файл, соответствующий $ var
, для передачи в команду, соответствующую $ num
.
Вы, наверное, хотели что-то вроде
while (( num < var )); do
echo "$num"
done
((...))
- это арифметическое расширение. Он вычислит значение выражения внутри. В этом случае он будет сравнивать значения двух переменных ( $
перед ними здесь не требуется). Если сравнение верно, то цикл while выполнит еще одну итерацию.
Цикл while также является бесконечным, поскольку вы не увеличиваете num
и не уменьшаете var
.
В конце вы можете попробовать
for (( num = 0; num < var; ++num )); do
echo "$num"
done
или
for (( num = 0; num < var; ++num )); do
printf '%d\n' "$num"
done
. Если вы знаете C или язык с синтаксисом, подобным C, вы узнаете этот тип цикла for.
awk решение:
awk -F'[[:space:]]+|:' '{ print $1,$2,$3,$4,$5,$6,$7,$8,$13,$14 }' data | column -t
Вывод:
19 54240283 . T C . . . 18 189
1 103020 . A C . . . 2 2
2 8797402 . G A . . . 3 0
-F'[ [:space:]]+|:'
- пробелы и :
считаются разделителями полей perl -pe 's|\d+,(\S+)$|join "\t", (split /:/, $1)[4,5]|e' data
19 54240283 . T C . . . 18 189
1 103020 . A C . . . 2 2
2 8797402 . G A . . . 3 0