是否有一个命令可以输出从特定行开始编号的行编号文件?

是否有一个命令可以输出从特定行开始编号的行编号文件?

cat -n file输出file带有行编号,但如何指定从哪一行开始编号?有没有一个命令可以做到这一点?

我想过也许将这个过程分成几个命令。如果我想从N文本文件的行开始行编号file.txt,那么:

  1. 打印第一N-1行,à lahead -$((N-1)) file.txt
  2. 打印剩余的N行,编号:tail -n N file.txt | cat -n

但如果输入来自 ,则第二步是不可能的stdin;第一步就会消耗掉所有的东西。我必须创建一些临时文件来读取然后将其删除,AFAIK。

答案1

您可以使用 awk 来执行此操作:

awk 'NR >= n { printf("%6d  ", NR-n+1) } 1' n=3

对于当前记录号 (NR) 大于或等于 n(作为变量传入)的行,打印从 1 开始的行前缀。1末尾的 是打印当前行的 awk 简写。

您还可以仍然使用head(1),因为当它读取了所需的行数时,它会停止消耗输入:

{ head -$((N-1)); cat -n; }

您可以通过管道进入该文件,或重定向文件:

cat foo | { head -$((N-1)); cat -n; }
{ head -$((N-1)); cat -n; } < foo

相关内容