Как извлечь информацию, разделенную символом, из столбца ?

(...) запускает подоболочку и выполняет указанные команды внутри нее. Вот почему ($ 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.

1
14.06.2017, 00:27
2 ответа

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:]]+|:' - пробелы и : считаются разделителями полей
2
27.01.2020, 23:33
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
0
27.01.2020, 23:33

Теги

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