如何在 Linux 中尽可能快地将文件中的列表项添加到另一个文件的每一行?

How can I prepend list items from a file to every line of another file as fast as possible in Linux?

我正在尝试使用 bash 将子域列表附加到域列表中。我有 2 个文件,一个有域列表,另一个有子域列表。这个想法是应该获取文件中的每一行,并在文件 2 中添加每一行。我在下面提供了文件示例、我当前的代码和预期的数据结果。

subdomain file 包含 150,000 个项目,域列表很小,通常少于 50 个。这个过程需要一个多小时,有时甚至更长,我很想找到加快速度的方法.我知道我可以使用 xargs 创建并行命令,这可能是一个选项,但是我花了一天左右的时间研究才得出这个当前的解决方案,而且我不知道如何在循环中实现 xargs,如果可能的话?

文件 1

site.com
sub.site.com
sub1.site.com
sub.sub.site.com

文件2

admin
members
help
blog

当前解决方案

 while read -r F1; do
    while read -r F2; do
      echo "$F2.$F1"
    done < $file2 >> $fileOut
 done < $file1

预期结果($fileOut)

admin.site.com
members.site.com
help.site.com
blog.site.com
admin.sub.site.com
members.sub.site.com
help.sub.site.com
blog.sub.site.com
admin.sub1.site.com
members.sub1.site.com
help.sub1.site.com
blog.sub1.site.com
admin.sub.sub.site.com
members.sub.sub.site.com
help.sub.sub.site.com
blog.sub.sub.site.com

使用awk

awk 'NR<=FNR{a[NR]=[=10=]} NR>FNR {for ( i in a) print a[i]"."[=10=]}'  file2  file1

演示:


$cat file1
site.com
sub.site.com
sub1.site.com
sub.sub.site.com
$cat file2 
admin
members
help
blog
$awk 'NR<=FNR{a[NR]=[=11=]} NR>FNR {for ( i in a) print a[i]"."[=11=]}'  file2  file1
blog.site.com
admin.site.com
members.site.com
help.site.com
blog.sub.site.com
admin.sub.site.com
members.sub.site.com
help.sub.site.com
blog.sub1.site.com
admin.sub1.site.com
members.sub1.site.com
help.sub1.site.com
blog.sub.sub.site.com
admin.sub.sub.site.com
members.sub.sub.site.com
help.sub.sub.site.com
$

另读https://unix.stackexchange.com/questions/169716/why-is-using-a-shell-loop-to-process-text-considered-bad-practice