如何在第一行命令之前在新行中插入总行数?

How to insert total number of lines in a new line before the first line command?

我有成千上万的 .xyz 文件,它们是像这样的化学坐标(例如):

  Fe        0.000000000     0.000000000     0.000000000
   C        2.112450000     0.000000000     0.000000000
   C        0.039817193     1.817419422     0.000000000

我搜索了很多简单的命令,如 sed 或 head 和 tail,以在文件顶部写入计数的行数(用换行符 \n 并在总数前有两个空格)但是无法成功。 我真的很感激任何帮助。 输出必须是这样的:

  3
Fe       0.000000000     0.000000000     0.000000000
C        2.112450000     0.000000000     0.000000000
C        0.039817193     1.817419422     0.000000000

您可以将其作为复合命令执行:

(wc -l < fileA && cat fileA) > outputA

请注意,我在那里使用了 < 以确保 wc 不会在第一行打印文件名。至少在 Mac OS 上,如果您不使用那样的重定向,它会起作用。


编辑:如果您需要对多个文件应用相同的内容:

mkdir output
ls *.xyz | while read filename; do
    (wc -l < $filename && cat $filename) > output/$filename
done

只是为了好玩,这里有一个您不应该使用但在某些情况下有效的命令:

tee xxx < fileA | wc -l > xxx # don't do this

试试这个:

sed '1i \
'$(wc -l < file.xyz) file.xyz

要使用 find 处理多个文件并使用 -i 标志 就地 编辑文件:

find . -name '*.xyz' -exec sh -c 'sed -i "1s/.*/$(wc -l < {})\n&/" {}' \;

注意: 由于文件将使用此命令就地编辑,您可能需要先检查输出。为此,请删除 sed 之后的 -i 标志。如果命令满足您的需要,则再次添加 -i 标志。