我正在使用 sed 来计算行号:
sed - n 'S=' file.txt
我想在 的第一行打印结果file.txt
。
答案1
为此,您需要两次遍历文件:一次用于计算行数,第二次用于在开头插入结果。sed
不是最佳工具。尝试:
cat <(wc -l < file.txt) file.txt
答案2
嗯嗯,看起来像是一个“多猫剥皮”会话。假设只需要原始行数怎么样......
sed 1i$(< file wc -l) file
或者
sed 1i$(sed -n "$=" file ) file
只是sed -i 1i....
为了让改变永久化
答案3
使用GNU sed
,如果行数是文件添加计数器行之前:
sed -i -n '1h;1!H;${=;x;p}' file
怎么运行的:
-n
:关闭默认打印。1h;1!H;
:将每一行移动到h
旧缓冲区。 (一个简单的H
方法几乎可以工作,但它也会产生不需要的空行。)${=;x;p}
:sed
到达最后一行时,打印行数=
。然后x
用模式缓冲区更改满载的保持缓冲区,并打印它。
答案4
awk
解决方案:
在最后一行之后追加很容易:
awk '1; END{print NR}' file
我们可以使用tac
将其添加到第一行:
tac file | awk '1; END{print NR}' | tac
与其他解决方案相比,此解决方案的优点是文件仅打开一次。
唯一awk
的替代方案有点复杂,我们需要输入文件两次,第一次计算行数,第二次将 NR 打印到开头:
awk 'FNR!=NR{if(FNR==1)print NR-1;print;}' file file
另一种awk
-only 替代方案(可能仅适用于 GNU):
awk -ireadfile 'NR==1{print split(readfile(FILENAME), l, "\n")-1}1' file