linux – 合并多个文件的更快捷方式

我在 Linux中有多个小文件(大约70,000个文件),我想在文件的每一行的末尾添加一个单词,然后将它们全部合并到一个文件中.

我正在使用这个脚本:

for fn in *.sms.txt 
do 
    sed 's/$/'$fn'/' $fn >> sms.txt
    rm -f $fn
done

有更快的方法吗?

解决方法

我试过这些文件:

for ((i=1;i<70000;++i)); do printf -v fn 'file%.5d.sms.txt' $i; echo -e "HAHA\nLOL\nBye" > "$fn"; done

我尝试了大约4分钟(真实)处理的解决方案.您的解决方案的问题在于您要求sed 70000次!分叉很慢.

#!/bin/bash

filename="sms.txt"

# Create file "$filename" or empty it if it already existed
> "$filename"

# Start editing with ed,the standard text editor
ed -s "$filename" < <(
   # Go into insert mode:
   echo i
   # Loop through files
   for fn in *.sms.txt; do
      # Loop through lines of file "$fn"
      while read l; do
         # Insert line "$l" with "$fn" appended to
         echo "$l$fn"
      done < "$fn"
   done
   # Tell ed to quit insert mode (.),to save (w) and quit (q)
   echo -e ".\nwq"
)

这个解决方案花了大约6秒

别忘了,ed是标准的文本编辑器,不要忽略它!如果你喜欢ed,你可能也会喜欢前!

干杯!

相关文章

/etc/sysctl.conf这个目录主要是配置一些系统信息,/etc/sys...
1.作用 useradd或adduser命令用来建立用户帐号和创建用户的起...
它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅...
不管是我们在安装软件还是监测软件的使用性能,我们都要随时...
装好Tomcat7后,发现除了本机能访问外界访问不了,岂有此理。...
修改防火墙配置需要修改 /etc/sysconfig/iptables 这个文件,...