0

我只是想将我的 .c 文件复制到行号列表文件中。基本上从我的 .c 文件生成一个 .prn 文件。我很难找到正确的 bash 命令来执行此操作。

4

4 回答 4

4

你的意思是nl

nl -ba filename.c

对所有行进行编号的-ba方法,而不仅仅是非空行。

于 2012-09-21T12:28:21.203 回答
3
awk '{print FNR ":" $0}' file1 file2 ...

是一种方式。

FNR 是 FileNumberRecord(每个文件的当前行号)。

您可以根据需要更改“:”。

$0意思是“整个输入线”

或者你可以做

 cat -n file1 file2 ....

IHTH

于 2012-09-21T12:28:14.460 回答
2

在我的 linux 系统上,我偶尔会使用pr -tn为列表添加行号前缀。-t 选项抑制页眉和页脚;-n 表示为行号添加前缀。-n 允许可选的格式和数字说明符;参见手册页。无论如何,要将文件 xyz.c 打印到带有行号的 xyz.prn,请使用:

pr -tn xyz.c > xyz.prn

请注意,这不像cat -n xyz.c > xyz.prn(使用cat -n前一个答案中建议的那样)那么紧凑和方便;但pr有许多其他选项,当我想对行进行编号并将它们放入多个列或并排打印多个文件时,我最常使用它。例如,对于 2 列编号的列表使用:

pr -2 -tn xyz.c > xyz.prn
于 2012-09-21T12:36:09.643 回答
2

我认为 shellter 的想法是正确的。但是,如果您需要将输出写入带有prn扩展名的文件,这是一种方法:

awk '{ sub(/\.c$/, "", FILENAME); print FNR ":" $0 > FILENAME ".prn" }' file1.c file2.c ...

要对当前工作目录中的所有文件执行此操作:

for i in *.c; do awk '{ sub(/\.c$/, "", FILENAME); print FNR ":" $0 > FILENAME ".prn" }' "$i"; done
于 2012-09-21T13:00:09.560 回答