估计文件中的行数并将该值插入第一行

Estimate number of lines in a file and insert that value as first line

我有很多文件,我必须估计每个文件中的行数并将该值添加为第一行。为了估计,我使用了这样的东西:

          wc -l 000600.txt | awk '{ print  }'

但是,如何对所有文件执行此操作,然后将每个文件对应的值添加为第一行,都没有成功。

一个例子: a.txt b.txt c.txt

 >>print a
   15

 >> print b
   22

 >>print c
   56

然后15、22、56分别加上:a.txtb.txt和c.txt

感谢您的帮助。

您可以在文件的第一行添加一个模式,例如 (LINENUM),然后使用以下脚本。

 wc -l a.txt  | awk 'BEGIN {FS =" ";} { print ;}' | xargs -I {} sed -i 's/LINENUM/LINENUM:{}/' a.txt

或者只使用这个脚本:

wc -l a.txt  | awk 'BEGIN {FS =" ";} { print ;}' | xargs -I {} sed -i '1s/^/LINENUM:{}\n/' a.txt

要遍历所有文件,您可以从该脚本中添加使用。

 for f in `ls *` ; do if [ -f $f ];  then wc -l $f  | awk 'BEGIN {FS =" ";} { print ;}' | xargs -I {} sed -i '1s/^/LINENUM:{}\n/' $f ; fi;  done

这样您可以将行号添加为当前目录中所有 *.txt 文件的第一行。在大文件的情况下,在这里使用该组命令也比就地编辑命令更快。不要修改空格或分号进入分组。

for f in *.txt; do
    { wc -l < "$f"; cat "$f"; } > "${f}.tmp" && mv "${f}.tmp" "$f"
done

这可能适合您 (GNU sed):

sed -i '1h;1!H;$!d;=;x' file1 file2 file3 etc ...

将每个文件存储在内存中,并插入最后一行行号作为文件大小。

选择:

sed -i ':a;$!{N;ba};=' file?