微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决估计文件中的行数,并将该值作为第一行插入

我有很多文件,因此我必须估计每个文件中的行数并将该值添加为第一行。为了估算这一点,我使用了以下方法

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

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

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

 >>print a
   15

 >> print b
   22

 >>print c
   56

然后分别将15、22和56添加到:a.txt b.txt和c.txt

感谢您的帮助。

解决方法

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

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

或仅在此脚本中使用:

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

这样,您可以将行号添加为当前目录中所有*.txt文件的第一行。如果文件很大,在这里使用该组命令比在位编辑命令要快。不要在分组中修改空格或分号。

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

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

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

这可能对您有用(GNU sed):

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

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

替代:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。