Дублирование строк в текстовом файле в зависимости от значения столбца

#bash #awk

#баш #авк

Вопрос:

Я пытаюсь продублировать ряд строк в зависимости от целого числа, присутствующего в одном из столбцов.

Например, при рассмотрении 4-го столбца:

 AATTGGCC  5.2  4.8  1
CCGGTTAA  1.8  3.3  3
ATATGCGC  1.8  4.6  1
 

Мой код должен вернуться:

 AATTGGCC
CCGGTTAA
CCGGTTAA
CCGGTTAA
ATATGCGC
 

В настоящее время у меня есть этот код:

 while read line; do
   for i in awk '{4}'; do
   awk '{print $1}' >> output.txt
   done
done < input.txt
 

Однако все, что он возвращает, — это первый столбец из исходной таблицы.

Кто-нибудь, пожалуйста, может мне помочь?

Ответ №1:

Имея ваши данные в файле с именем f , вы можете сделать это просто с awk помощью alone, например

 $ awk '{ n=$4; while (n--) print $1}' f
AATTGGCC
CCGGTTAA
CCGGTTAA
CCGGTTAA
ATATGCGC
 

Где вы просто получаете число в 4-м столбце и повторяете это много раз, выводя первый столбец в отдельной строке. Дайте мне знать, если у вас возникнут дополнительные вопросы.

Если бы вы действительно хотели сделать это с помощью shell (не делайте этого, но гипотетически), вы могли бы сделать по существу то же самое:

 $ while read dna n n n; do while ((n-- != 0)); do  echo "$dna"; done; done < f
AATTGGCC
CCGGTTAA
CCGGTTAA
CCGGTTAA
ATATGCGC
 

awk всегда будет на порядки быстрее, чем обработка с помощью цикла оболочки.