Как я добавляю столбец к текстовому файлу, где значение является номером строки?
Файл прежде:
Foo Ba Lk Q
Lorem ipsum doler
Файл после
1 Foo Ba Lk Q
2 Lorem ipsum doler
и т.д.
Несколько разных подходов:
кошка
$ cat -n file
1 Foo Ba Lk Q
2 Lorem ipsum doler
Perl
perl -pe 's/^/$. /' file
-pe
означает "печать каждая входная строка после применения сценария, данного -e
к нему". Затем мы заменяем ^
(начало строки) с номером строки ($.
) и пространство.
С другой стороны, так как это - Perl и TIMTOWTDI:
perl -ne 'print "$. $_"' file
perl -pe '$_ = "$. $_"' file
Во всех этих примерах, если Вы хотите изменить исходный файл, использование -i
:
perl -i -pe 's/^/$. /' file
perl -i -ne 'print "$. $_"' file
perl -i -pe '$_ = "$. $_"' file
awk
$ awk '{print NR,$0}' file
1 Foo Ba Lk Q
2 Lorem ipsum doler
Специальная переменная NR
текущий номер строки и $0
текущая строка. Для внесения изменения в исходном файле (принимающий Вас имеют достаточно недавнюю версию GNU awk) сделайте:
gawk -iinplace '{print NR,$0}' file
sed
$ sed = file | sed 'N;s/\n/\t/'
1 Foo Ba Lk Q
2 Lorem ipsum doler
=
означает, "печатают номер строки перед каждой строкой". Однако это печатает число на строке отдельно и входной строке под этим. Второе sed
команда откладывает их на той же строке снова.
python3 -c "[print(i+1, l.strip())for i, l in enumerate(open('f').readlines())]"
Вывод:
1 Foo Ba Lk Q
2 Lorem ipsum doler
, Где f
путь к Вашему файлу, в кавычках.
open('f').readlines()
считает файл, в строках, и
enumerate(open('f').readlines())
впоследствии добавит, что число к каждой из строк, и
print(i+1, l.strip())
распечатает число (+1, так как первый индекс 0), + соответствующая строка