Najpierw pomyślałem o SED ( sed "s/^/COUNTER \&/" /tmp/1.tex
), ale jest on zaprojektowany dla pojedynczej linii i nie mogę zwiększyć licznika przez sed tak myśląc teraz, awk
ponieważ mam świetne doświadczenia ze gawk
zintegrowanymi podejściami. Dane
What & South Dragon & North Dragon & 5 \\ \hline
What & South Dragon & North Dragon & 5 \\ \hline
What & South Dragon & North Dragon & 5 \\ \hline
Oczekiwany wynik
1 & What & South Dragon & North Dragon & 5 \\ \hline
2 & What & South Dragon & North Dragon & 5 \\ \hline
3 & What & South Dragon & North Dragon & 5 \\ \hline
System operacyjny: Debian 8.5
text-processing
awk
nl
Léo Léopold Hertz 준영
źródło
źródło
nl -s ' &' /path/to/file
.-s
określa, co oddziela liczby od treści pliku wejściowego.nl
różni się odcat -n
iawk
rozwiązanie w tym, że nie liczba pustych linii domyślnieTo osiąga to, czego szukasz. (jak robi
awk '$0=NR" & "$0' filename
, ale to trochę tajemnicze)Lub jeśli jest to
sed
preferowane, daje to ten sam rezultat.perl
podejścia.źródło
sed = filename | ...
? - - Nie wiedziałem, że możesz używać sed zequal
symbolem. - - Czy twojesed
oświadczenie może działać w dynamicznych środowiskach? Jakieś słabości?=
operator znajduje się w sekcji „Polecenia zera lub jeden adres”.= Print the current line number
. Tak więc funkcja jest faktycznie wbudowana w sed. Miły!Python może być dobrym alternatywnym narzędziem do tego:
Działa to tak, że przekierowujemy tekst do standardowego interfejsu Pythona i odczytujemy stamtąd wiersze.
enumerate()
funkcja podaje liczbę wierszy,sys.stdin
podana jako dane wejściowe i1
jest indeksem początkowym. Reszta jest prosta - tworzymy listę nowych ciągów, rzutując indeks jako ciąg połączony razem z' & '
ciągiem i samą linią. Wreszcie, wszystko to jest ponownie składane z listy w jeden test przez''.join()
funkcję.Alternatywnie, oto wieloliniowa wersja pliku skryptu lub po prostu dla czytelności:
Działa tak samo:
Ale jeśli wolisz robić to w bashu, możesz to również zrobić:
źródło
enumerate()
oszczędza jak 3 linie kodu. Jest to przydatne, gdy mamy do czynienia z innymi rzeczami, takimi jak przetwarzanie pozycji na listach. Zobacz docs.python.org/2/library/functions.html#enumeratebash
przykład, to skorzystaj z niego :) Właśnie z doświadczenia zauważyłem,enumerate()
że jest bardziej elegancki, ale to tylko moja opinia.enumerate
jest bardziej przejrzysty niż tworzenie instancji zmiennej. Czy wyrażenie lambda może zaoszczędzić trochę miejsca?Jest to również opcja korzystająca
cat -n
z automatycznego numerowania:źródło