Печатать символ n раз на основе значения столбца - PullRequest
3 голосов
/ 03 мая 2019

Я пытаюсь напечатать символ "N" несколько раз, основываясь на значении столбца в нескольких строках таблицы

Например, вывод этой таблицы:

AATTGGCC   A   1.7   4
CCGGTTAA   T   0.8   3
AAGGTTCC   G   2.4   7

В идеале вернется:

NNNN
NNN
NNNNNNN

на основе значения в столбце 4.

В настоящее время я использую:

while read line
do
a=$4
printf "$0.sN\n" {a}
done < table.txt

Но это возвращает только три 'N', каждый на новых строках. В идеале я также хотел бы распечатать письмо из столбца 2 в конце каждой строки вывода.

Может кто-нибудь, пожалуйста, помогите мне?

Ответы [ 2 ]

4 голосов
/ 03 мая 2019

С bash:

while read x x x end; do
  for ((i=0; i<$end; i++)); do
    echo -n "N"
  done
  echo
done < file

Выход:

NNNN
NNN
NNNNNNN
3 голосов
/ 03 мая 2019

Основываясь на приведенном вами примере, я бы изменил его на следующее:

while read line
do
    a=$(echo ${line} | awk '{print $4}')
    printf "N%.0s" $(seq $a)
    echo
done < table.txt

Мне не ясно, как вы смогли получить 3 N из вашего исходного решения (я не смог воспроизвести), но, возможно, у нас другая конфигурация.Решение, которое я разместил выше, основано на BASH.Внутри цикла while первая строка кода

    a=$(echo ${line} | awk '{print $4}')

выводит строку, а затем направляет ее в оператор awk, который просматривает только четвертый столбец и сохраняет его в переменной с именем «a».Обозначение $(...) просто означает оценку оператора в скобках как команды BASH (в этом случае echo передается в команду awk).Во второй строке,

    printf "N%.0s" $(seq $a)

, я печатаю $ N с помощью команды printf.Еще раз, $(...) просто запускает команду BASH, которая в данном случае является командой seq для печати символов $ a.С помощью этого скрипта я смог получить следующий результат для вашего примера файла table.txt:

NNNN
NNN
NNNNNNN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...