将文件的行数打印到该文件的第一行

将文件的行数打印到该文件的第一行

我正在使用 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

怎么运行的:

  1. -n:关闭默认打印。

  2. 1h;1!H;:将每一行移动到h旧缓冲区。 (一个简单的H方法几乎可以工作,但它也会产生不需要的空行。)

  3. ${=;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

相关内容