如何向文本文件添加一列,其中的值为行号?
归档时间:
Foo Ba Lk Q
Lorem ipsum doler
之后归档
1 Foo Ba Lk Q
2 Lorem ipsum doler
ETC
答案1
一些不同的方法:
猫
$ cat -n file 1 Foo Ba Lk Q 2 Lorem ipsum doler
Perl
perl -pe 's/^/$. /' file
意思
-pe
是“将 给出的脚本应用到输入行后打印出每一行-e
”。然后,我们用^
行号 ($.
) 和空格替换 (行的开头)。或者,因为这是 Perl,并且蒂姆托:
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
命令将它们重新放回到同一行上。
答案2
只是为了好玩
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)+相应的行