我只是想将我的 .c 文件复制到行号列表文件中。基本上从我的 .c 文件生成一个 .prn 文件。我很难找到正确的 bash 命令来执行此操作。
问问题
83 次
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 回答