Me gustaría tener cada línea en un archivo repetido un número fijo de veces.
Por ejemplo, que cada línea se repita cuatro veces:
a
b
c
se convierte en:
a
a
a
a
b
b
b
b
c
c
c
c
He realizado algunas búsquedas, y hay muchas preguntas y respuestas en el sentido de hacer lo contrario, por ejemplo, fusionar líneas duplicadas en líneas individuales, y tal vez algunas sobre duplicar líneas imprimiéndolas nuevamente.
Sería fácil hacer esto en C, pero desearía saber más sobre los comandos nativos para no tener que recurrir a este tipo de descartes todo el tiempo.
text-processing
sed
awk
perl
Yimin Rong
fuente
fuente

awk'sforno necesita apoyos si sólo hay un comando para repetir. Yperles más sencillo si se utilizaforeachen bucle:for$i(0..3){print}.perl -ne 'print(($_)x4)'. Además, debe citar$line(en eco) en su versión bash.BEGIN { ORS="\r\n" }Me pregunto si esto se está convirtiendo en un partido de golf :
Explicación:
sed's
pcomando es imprimir la línea actual. El comportamiento predeterminado es imprimir la línea actual justo antes de pasar a la siguiente línea (es por eso que sed tiene-nque permitirle desactivarla). Algunos seds más antiguos no tienen punto y coma (creo), por lo que es posible que tenga que hacersed -e p -e p -e pAwk trabaja con
condition {action}pares. Si se omite la acción, el valor predeterminado es imprimir la línea actual si la condición devuelve verdadero. Awk, como muchos lenguajes tipo C, se trata1como verdadero. (Para completar, si se omite la condición, la acción se ejecutará para cada registro).Muchas funciones perl aprovechan la variable "predeterminada". Esta línea es equivalente a (en perl 5.16):
fuente
1en awk? Taquigrafía paraprint $0?1(verdadera); El bloque predeterminado es equivalente a{print}. Entonces, la declaración1significaría imprimir el búfer de línea actual ({print}). ({print}y{print $0}son casi lo mismo, qed.)sedque no admite punto y coma como terminadores de comando; ¿Realmente hay tal cosa?fuente
Esto se puede hacer sin que se requiera
sed,perloawk.o usando un ciclo while:
Ejemplos
en bucle mientras buclefuente
Usando puramente shell:
fuente
--helpcomo una cadena en lugar de una opción? [considere el caso dondelineestá--helpu otra opción]yes -- --helpyesyheadsignifica que esto no es "puramente shell"Esto podría funcionar para usted (GNU sed):
Repetirá cada línea 4 veces.
O si lo prefieres:
Donde repites cada línea 3 veces más.
fuente
La respuesta de @potong no funciona con líneas vacías, reemplazar
\+con*debería solucionarlo:fuente