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

时间:2016-11-04 14:12:33

标签: sed word-count

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

void

我经常搜索一个简单的命令,比如sed或head和tail,在文件顶部写入计算的行数(在换行符之前使用换行符\ n并且在总数之前有两个空格)但是不能成功。 我真的很感激任何帮助。 输出mst是这样的:

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

2 个答案:

答案 0 :(得分:1)

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

(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

答案 1 :(得分:1)

试试这个:

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

使用find处理多个文件并使用-i标记编辑到位文件:

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

NB:由于使用此命令将对文件进行编辑,您可能需要先检查输出。为此,请在-i之后删除sed标记。如果命令符合您的需要,则再次添加-i标志。