Como imprimir cada linha de um arquivo quantas vezes de acordo com o número na primeira coluna

1
Input_file:
1 string1 
4 string2
2 string3
...

Output_file:
1 string1
4 string2
4 string2
4 string2
4 string2
2 string3
2 string3
...

Aqui está o meu código e não funcionou :( Por favor ajude!

#!/bin/bash
N=0
cat input_file | while read LINE; do

    N=$((N+1))

awk '{for(i=0;i<'$1';i++);print}' $LINE >> output_file

done
    
por Dailu Chen 29.03.2017 / 02:15

3 respostas

4

Dos comentários :

awk '{for(i=0;i<$1;i++) print}' input_file > output_file

Isso faz um loop em cada linha de input_file ; em cada linha, faz um loop de i de acordo com o primeiro campo e imprime a linha atual muitas vezes. A saída inteira é então redirecionada para output_file .

    
por 29.03.2017 / 03:03
2

com perl

$ cat ip.txt 
1 string1 
4 string2
2 string3
$ perl -ane 'print $_ x $F[0]' ip.txt 
1 string1 
4 string2
4 string2
4 string2
4 string2
2 string3
2 string3
  • -a opção para dividir a linha de entrada nos espaços e salvar em @F array
  • -n de loop sobre o arquivo de entrada, por padrão, newline é o separador de linha. Não imprima linhas de entrada
  • -e execute o código Perl
  • print $_ x $F[0] impressão explícita para repetir a linha de entrada $_ número de vezes especificado pelo primeiro campo $F[0]
por 29.03.2017 / 03:44
0
perl -pae '$_ = $_ x $F[0]' input_file

perl -nae 'print while $F[0]--' inputfile

perl -pae 's/^.*\n\K/$'/m while --$F[0]' inputfile

while IFS= read -r l; do yes "$l" | head -n "${l%%[!0-9]*}"; done < inputfile

while IFS= read -r l; do csh -c "repeat ${l%%[!0-9]*} echo '$l'"; done < inputfile

while IFS= read -r l; do
   for k in $(seq "${l%%[!0-9]*}"); do echo "$l"; done
done < inputfile
    
por 29.03.2017 / 10:54