Duplicar uma linha o mesmo número de vezes que a coluna 1

1

Existem várias questões sobre como duplicar linhas, eu quero duplicar automaticamente cada linha o número específico de vezes como encontrado no campo um de um arquivo. Eu tenho um arquivo grande com dois campos, o campo um é um número, o campo dois é a informação em questão, assim.

12     AAA
18     BBB
25     CCC
33     DDD

Eu gostaria de duplicar cada linha para que seja representado o mesmo número de vezes que o número no campo um. Então, eu quero 12 linhas que digam "12 AAA" e assim por diante.

Eu sei que posso colar manualmente cada linha x número de vezes no vim (copiar e depois "12p"), mas isso parece oneroso para um arquivo grande. Alguém sabe um script que pode fazer isso automaticamente?

    
por mah 25.09.2018 / 17:22

4 respostas

2

Com awk igual à resposta de JigglyNaga:

awk '{ c=0; while ($1>c++) print }' infile
    
por 25.09.2018 / 18:18
4

Usando o GNU awk:

#!/usr/bin/gawk -f
{ 
    for (c=strtonum($1) ; c ; c--) 
        print
}
    
por 25.09.2018 / 17:43
2

Solução pura do bash:

#!/bin/bash
while IFS= read -r line; do
    repeats=${line%%[ \t]*}   # part of line up to first space or tab
    while ((repeats--)); do echo "$line"; done
done < "$1"
    
por 25.09.2018 / 18:39
0

Uma solução alternativa para o awk:

<infile awk ' i=$1 { while(i--) print }' 
    
por 26.09.2018 / 03:30