cat -n file
输出file
带有行编号,但如何指定从哪一行开始编号?有没有一个命令可以做到这一点?
我想过也许将这个过程分成几个命令。如果我想从N
文本文件的行开始行编号file.txt
,那么:
- 打印第一
N-1
行,à lahead -$((N-1)) file.txt
- 打印剩余的
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