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



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

子域文件包含 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]=$0} NR>FNR {for ( i in a) print a[i]"."$0}'  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]=$0} NR>FNR {for ( i in a) print a[i]"."$0}'  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

最新更新