Com awk
igual à resposta de JigglyNaga:
awk '{ c=0; while ($1>c++) print }' infile
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?
Usando o GNU awk:
#!/usr/bin/gawk -f
{
for (c=strtonum($1) ; c ; c--)
print
}
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"
Uma solução alternativa para o awk:
<infile awk ' i=$1 { while(i--) print }'