#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
всегда будет на порядки быстрее, чем обработка с помощью цикла оболочки.