【发布时间】:2012-01-02 15:08:15
【问题描述】:
如何在文件的每一行开头添加数字?
例如:
这是 文本 从文件中。变成:
000000001 这是 000000002 正文 000000003 来自文件。【问题讨论】:
标签: bash row-number
如何在文件的每一行开头添加数字?
例如:
这是 文本 从文件中。变成:
000000001 这是 000000002 正文 000000003 来自文件。【问题讨论】:
标签: bash row-number
cat -n thefile 将完成这项工作,尽管数字格式略有不同。
【讨论】:
不要使用 cat 或任何其他非为此而设计的工具。使用程序:
nl - 文件行数
例子:
$ nl --number-format=rz --number-width=9 foobar
$ nl -n rz -w 9 foobar # short-hand
因为 nl 是为此而生的 ;-)
【讨论】:
ls | nl #nl for dummies
-ba 开关。
您正在寻找nl(1) 命令:
$ nl -nrz -w9 /etc/passwd
000000001 root:x:0:0:root:/root:/bin/bash
000000002 daemon:x:1:1:daemon:/usr/sbin:/bin/sh
000000003 bin:x:2:2:bin:/bin:/bin/sh
...
-w9 要求输入九位数字; -nrz 要求将数字格式化为右对齐并使用零填充。
【讨论】:
awk(1) 肯定擅长此类任务。
awk 中做到这一点,使用一些 for 循环,这将需要另外 30 分钟的脚本来运行文件;或者我可以在这里问。我以前从未听说过nl。我是否发布了错误的问题?
AWK 的 printf、NR 和 $0 可以轻松地对格式进行精确灵活的控制:
~ $ awk '{printf("%010d %s\n", NR, $0)}' example.txt
0000000001 This is
0000000002 the text
0000000003 from the file.
【讨论】:
public static final int CONSTANTX; 的东西,我想要类似 public static final int CONSTANTX;=X 的东西,其中 X 是源文件中的行号。我将您的答案重新排列为awk '{printf("%s = %d;\n", $0, NR-4)}' Constants.java,它就像一个魅力!
perl -pe 'printf "%09u ", $.' -- example.txt
【讨论】:
这里有一个 bash 脚本也可以做到这一点:
#!/bin/bash
counter=0
filename=$1
while read -r line
do
printf "%010d %s" $counter $line
let counter=$counter+1
done < "$filename"
【讨论】:
最简单、最简单的选择是
awk '{print NR,$0}' file
请参阅上面的评论,了解为什么 nl 并不是真正的最佳选择。
【讨论】: