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:
-
e
sã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.txt
nunca é 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