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

Sed 如何在第一行命令之前在新行中插入总行数?,sed,word-count,Sed,Word Count,我有数千个.xyz文件,它们是化学坐标,例如: 我曾多次搜索一个简单的命令,如sed或head and tail,以在文件顶部写入计数的行数(换行,\n并且在总数之前有两个空格),但未能成功。 我真的很感激你给我的任何帮助。 输出mst应如下所示: 3 Fe 0.000000000 0.000000000 0.000000000 C 2.112450000 0.000000000 0.000000000 C 0.0398

我有数千个.xyz文件,它们是化学坐标,例如:

我曾多次搜索一个简单的命令,如sed或head and tail,以在文件顶部写入计数的行数(换行,\n并且在总数之前有两个空格),但未能成功。 我真的很感激你给我的任何帮助。 输出mst应如下所示:

  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

为了好玩,这里有一个命令,您应该不要使用,但在某些情况下可以使用:

tee xxx < fileA | wc -l > xxx # don't do this
tee xxxxxx#不要这样做

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

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

为了好玩,这里有一个命令,您应该不要使用,但在某些情况下可以使用:

tee xxx < fileA | wc -l > xxx # don't do this
tee xxxxxx#不要这样做
试试这个:

sed '1i \
'$(wc -l < file.xyz) file.xyz
NB:由于将使用此命令就地编辑文件,您可能需要首先检查输出。为此,请删除
sed
之后的
-i
标志。如果命令满足您的需要,请再次添加
-i
标志。

尝试以下操作:

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

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

@John Zwinck感谢编辑类似
cat的内容@John Zwinck感谢编辑类似
cat的内容感谢回复。第一个命令适用于一个文件,但在我有5000多个文件的情况下,我必须对该命令应用哪些更改才能保留文件名并分别对所有文件执行这些更改?(“*.xyz”为例)@Amir:我添加了一个在所有
*.xyz
文件上编写循环的示例。非常感谢,它完美地解决了我的问题。非常感谢您的帮助,对于带有空格的文件名,循环会中断,对于*.xyz中的文件名,
会更好;我想是这样的。说得好,我没想到。我在我的系统(2097152)上运行了一个快速实验,创建了一个比
ARG_MAX
长的命令行,但实际上是
ls
爆炸了,而不是shell
for
循环。根据,for
循环实际上是解决因参数过长而失败的命令的方法(但速度很慢)。(它还指出,正如您所提到的,快速解决方案是
find
。)感谢您的回复。第一个命令适用于一个文件,但在我有5000多个文件的情况下,我必须对该命令应用哪些更改才能保留文件名并分别对所有文件执行这些更改?(“*.xyz”为例)@Amir:我添加了一个在所有
*.xyz
文件上编写循环的示例。非常感谢,它完美地解决了我的问题。非常感谢您的帮助,对于带有空格的文件名,循环会中断,对于*.xyz中的文件名,
会更好;我想是这样的。说得好,我没想到。我在我的系统(2097152)上运行了一个快速实验,创建了一个比
ARG_MAX
长的命令行,但实际上是
ls
爆炸了,而不是shell
for
循环。根据,for
循环实际上是解决因参数过长而失败的命令的方法(但速度很慢)。(它还指出,正如您所提到的,快速解决方案是
find
。)