Primero pensé en SED ( sed "s/^/COUNTER \&/" /tmp/1.tex), pero está diseñado para una sola línea, y no puedo incrementar el contador por sí mismo, así que ahora pienso awkporque tengo grandes experiencias con gawkenfoques integrados. Datos
What & South Dragon & North Dragon    & 5 \\ \hline
What & South Dragon & North Dragon    & 5 \\ \hline
What & South Dragon & North Dragon    & 5 \\ \hline
Rendimiento esperado
1 & What & South Dragon & North Dragon    & 5 \\ \hline
2 & What & South Dragon & North Dragon    & 5 \\ \hline
3 & What & South Dragon & North Dragon    & 5 \\ \hline
SO: Debian 8.5
                    
                        text-processing
                                awk
                                nl
                                
                    
                    
                        Léo Léopold Hertz 준영
fuente
                
                
            fuente

nl -s ' &' /path/to/file.-sespecifica qué separa los números del cuerpo del archivo de entrada.nldifiere decat -ny laawksolución en que noEsto logra lo que buscas. (como lo hace
awk '$0=NR" & "$0' filename, pero eso es un poco críptico)O si es
sedpreferible, esto da el mismo resultado.perlenfoques.fuente
sed = filename | ...? - - No sabía que puedes usar sed con elequalsímbolo. - - ¿Puede suseddeclaración funcionar en entornos dinámicos? ¿Alguna debilidad?=operador está en la sección "Comandos de cero o una dirección".= Print the current line number. Por lo tanto, la función está incorporada en sed. ¡Agradable!Python puede ser una buena herramienta alternativa para esto:
La forma en que esto funciona es que redirigimos el texto al stdin de Python y leemos líneas desde allí.
enumerate()La función es lo que da el recuento de líneas,sys.stdinespecificado como entrada y1es el índice inicial. El resto es simple: hacemos una lista de nuevas cadenas al convertir el índice como una cadena unida con una' & 'cadena y la línea misma. Finalmente, todo lo que la función vuelve a montar de la lista en una prueba''.join().Alternativamente, aquí hay una versión de varias líneas para un archivo de script o simplemente para facilitar la lectura:
Funciona igual:
Pero si prefieres hacerlo en bash, entonces eso también se puede hacer:
fuente
enumerate()ahorra como 3 líneas de código. Es útil cuando se trata con otras cosas, como procesar elementos en listas. Ver docs.python.org/2/library/functions.html#enumeratebashejemplo, entonces siéntete libre de usar eso :) Por experiencia me parecióenumerate()más elegante, pero esa es solo mi opinión. Por supuesto, use otro método si cree que está más claroenumeratees más claro que la instanciación variable. ¿Puede la expresión lambda ahorrar algo de espacio?Esta también es una opción que se usa
cat -ncon la numeración automática:fuente