Jak mogę dołączyć numer linii i tabulator na początku każdej linii pliku tekstowego?
Jak mogę dołączyć numer linii i tabulator na początku każdej linii pliku tekstowego?
Odpowiedzi:
awk '{printf "%d\t%s\n", NR, $0}' < filename
awk '{print NR, "\t", $0}'
.
nl
jest również NIEPRAWIDŁOWE. W kodzie źródłowym nigdy nie da ci prawidłowych numerów linii, ponieważ nie liczy linii z białymi spacjami.
Polecenie nl powinno to zrobić, ale dodaje również spację przed numerem wiersza. Jest to część jądra systemu Linux.
nl lines.txt
1 $bkWTN
2 $cV8$.
nl
aby pominąć spację przed liczbą. Wystarczy użyć -w1
opcji, aby powiedzieć, że minimalna szerokość dla liczby wynosi 1.
-nln
możesz uzasadnić w lewo, jeśli nie chcesz spacji przed numerami wierszy. Ponadto, aby określić kartę separatora można użyć -s$'\t'
lub -s' '
(Włóż kartę między apostrofami z ctrl+v
potem tab
).
nl -w1
(z GNU coreutils 8.24) nie obcina numerów linii.
sed = test.txt | sed 'N;s/\n/\t/'
Polecenie „sed =” wypisze numer wiersza, a następnie znak powrotu karetki, a następnie następny wiersz.
Wyrażenie „N; s / \ n / \ t /” zajmie każdą linię, pobierze następną linię (tj. Numer linii i linię) i zastąpi znak powrotu karetki znakiem tabulacji.
\n
jest to wysuw wiersza (zwykle nazywany po prostu „nowym wierszem”, ponieważ jego pierwsze powszechne użycie miało miejsce w Uniksie) i \r
jest znakiem powrotu karetki. Używa systemu Windows \r\n
(zwanego także CRLF
).
Co powiesz na
cat -n somefile.txt
?
OK, oto jedno-liniowe rozwiązanie bash:
$ IFS=$'\n';x=1;for l in $(<file.txt);do echo -e "$x\t$l";((x+=1));done
$ IFS=
Pierwsze ustawienie IFS każe bashowi czytać jednocześnie pełną linię. Druga linia resetuje IFS do wartości domyślnych.
Jako dodatkowy bonus, działa całkowicie w twojej powłoce i nie wykonuje programu!
Ok, ponieważ zbieramy sposoby, aby to zrobić,
grep -n . file.txt | sed 's/\(^[0-9]*\):/\1 /g'
# this is a tab with Ctrl-V + Tab =====> ----
sed file.txt -e 's/^/\t/' | cat -n | sed -e 's/^\t//'
lub dla niektórych nie-GNU sed
:
cat file.txt | sed -e 's/^/\\t/' | cat -n | sed -e 's/^\\t//'