J'ai d'abord pensé à SED ( sed "s/^/COUNTER \&/" /tmp/1.tex
) mais il est conçu pour une seule ligne, et je ne peux pas incrémenter le compteur lui-même en sed donc awk
je pense maintenant parce que j'ai de grandes expériences avec gawk
des approches intégrées. Les données
What & South Dragon & North Dragon & 5 \\ \hline
What & South Dragon & North Dragon & 5 \\ \hline
What & South Dragon & North Dragon & 5 \\ \hline
Production attendue
1 & What & South Dragon & North Dragon & 5 \\ \hline
2 & What & South Dragon & North Dragon & 5 \\ \hline
3 & What & South Dragon & North Dragon & 5 \\ \hline
OS: Debian 8.5
text-processing
awk
nl
Léo Léopold Hertz 준영
la source
la source
nl -s ' &' /path/to/file
.-s
spécifie ce qui sépare les nombres du corps du fichier d'entrée.nl
diffère decat -n
et laawk
solution en ce qu'elle ne numérote pas les lignes vides par défautCela permet d'atteindre ce que vous recherchez. (comme c'est le cas
awk '$0=NR" & "$0' filename
, mais c'est un peu cryptique)Ou si cela est
sed
préférable, cela donne le même résultat.perl
approches.la source
sed = filename | ...
? - - Je ne savais pas que vous pouvez utiliser sed avecequal
symbole. - - Votresed
relevé peut-il fonctionner dans des environnements dynamiques? Des faiblesses?=
opérateur est dans la section "Commandes à zéro ou à une adresse".= Print the current line number
. La fonctionnalité est donc intégrée à sed. Agréable!Python peut être un bon outil alternatif pour cela:
La façon dont cela fonctionne est que nous redirigeons le texte dans le stdin de python et lisons des lignes à partir de là.
enumerate()
La fonction est ce qui donne le nombre de lignes, avecsys.stdin
spécifié comme entrée et1
est l'indice de départ. Le reste est simple - nous créons une liste de nouvelles chaînes en castant l'index sous forme de chaîne jointe à la' & '
chaîne et à la ligne elle-même. Enfin, tout cela est remonté de la liste en un seul test par la''.join()
fonction.Alternativement, voici une version multi-lignes pour un fichier de script ou simplement pour la lisibilité:
Fonctionne tout de même:
Mais si vous préférez le faire en bash, cela peut aussi être fait:
la source
enumerate()
enregistre comme 3 lignes de code. Il est utile lorsque vous traitez d'autres choses, comme le traitement d'éléments dans des listes. Voir docs.python.org/2/library/functions.html#enumeratebash
exemple, alors n'hésitez pas à l'utiliser :) Je viens de trouver l'expérienceenumerate()
plus élégante, mais c'est juste mon opinion. Par tous les moyens, utilisez une autre méthode si vous pensez que c'est plus clairenumerate
est plus clair que l'instanciation variable. L'expression lambda peut-elle économiser de l'espace?Il s'agit également d'une option utilisant
cat -n
la numérotation automatique:la source