Как я могу добавить номер строки и табуляцию в начало каждой строки текстового файла?
Как я могу добавить номер строки и табуляцию в начало каждой строки текстового файла?
Ответы:
awk '{printf "%d\t%s\n", NR, $0}' < filename
awk '{print NR, "\t", $0}'
.
nl
также НЕПРАВИЛЬНО. В исходном коде он никогда не даст правильные номера строк, поскольку он не считает строки только с пробелами.
Команда nl должна сделать это, но она также добавляет пробел перед номером строки. Это часть Linux Coreutils.
nl lines.txt
1 $bkWTN
2 $cV8$.
nl
чтобы пропустить пробел перед числом. Просто используйте -w1
опцию, чтобы указать минимальную ширину для числа 1.
-nln
вы можете выравнивать по левому краю, если не хотите пробелов перед номерами строк. Кроме того, чтобы указать разделитель табуляции, вы можете использовать -s$'\t'
или -s' '
(вставьте вкладку между одинарными кавычками с помощью ctrl+v
затем tab
).
nl -w1
(от GNU Coreutils 8.24) не не усечь номера строк.
sed = test.txt | sed 'N;s/\n/\t/'
Команда «sed =» напечатает номер строки, за которым следует возврат каретки, а затем следующая строка.
Выражение «N; s / \ n / \ t /» будет занимать каждую строку, получать следующую строку (т.е. номер строки и строку) и заменять возврат каретки табуляцией.
\n
это перевод строки (обычно называемый просто «новой строкой», так как его первое широкое распространение было в Unix), и \r
это возврат каретки. Windows использует \r\n
(также упоминается как CRLF
).
Как насчет
cat -n somefile.txt
?
ОК, вот решение для одной строки:
$ IFS=$'\n';x=1;for l in $(<file.txt);do echo -e "$x\t$l";((x+=1));done
$ IFS=
Первая настройка IFS указывает bash читать всю строку за раз. Вторая строка сбрасывает IFS по умолчанию.
В качестве дополнительного бонуса, он полностью запускается в вашей оболочке и не запускает программу!
Хорошо, так как мы собираем способы сделать это,
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//'
или для некоторых не-GNU sed
:
cat file.txt | sed -e 's/^/\\t/' | cat -n | sed -e 's/^\\t//'