AWK é bom para isso:
awk '{while (-- > 0) print }' test.txt
Isso interpreta cada linha de test.txt como um registro de campos separados por espaços. Ele faz a contagem regressiva ( -- ) do valor do primeiro campo ( ) até que esse valor seja zero, imprimindo o valor do segundo campo ( ) em sua própria linha a cada vez.
Uma das vantagens deste método é que ele automaticamente tolera espaços em branco extras antes, entre ou após os números.
Especificamente:
-
esão o primeiro e o segundo campos. -
O
while-loop avalia a expressão-- > 0. Se for verdade, entãoprinté executado e, em seguida, recomeça . - A subexpressão
--diminui o valor do primeiro campo em um. (Isso acontece na memória; o arquivo realtext.txtnunca é modificado.) Mas retorna o valortinha pouco antes de ser reduzido. Veja Gawk: Programação Efetiva AWK , seção 6.2.4 Operadores de Incremento e Decremento , para uma explicação mais completa.
Se preferir, você pode usar um for - loop :
awk '{for (; > 0; --) print }' test.txt
Ou com um contador de loop dedicado variável :
awk '{for (i = ; i > 0; --i) print }' test.txt
Ou se achar mais intuitivo contar acima do que diminuir, você pode fazer isso:
awk '{for (i = 0; i < ; ++i) print }' test.txt