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}'.
nljest 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$.
nlaby pominąć spację przed liczbą. Wystarczy użyć -w1opcji, aby powiedzieć, że minimalna szerokość dla liczby wynosi 1.
-nlnmoż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+vpotem 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.
\njest to wysuw wiersza (zwykle nazywany po prostu „nowym wierszem”, ponieważ jego pierwsze powszechne użycie miało miejsce w Uniksie) i \rjest 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//'