Bash 对于每一行,创建一个新行以附加来自另一个文件的多个条目

Bash 对于每一行,创建一个新行以附加来自另一个文件的多个条目,bash,awk,sed,Bash,Awk,Sed,好吧,我回来了,为你们中的一位出色的奇才准备了另一个无脑游戏,我一直在玩awk,但还没有完全弄明白这一点。因此,毫不拖延地说,这就是我试图解决的问题 我有两个文件 file1看起来这个实际文件有数百行随机字 somewebsite someotherwebsite somestinking blahblah foobar file2看起来像这么多TLD,更多 .com.th .co.uk .com .de .ath.cx 好的,我需要文件1中的每一行将文件2中的每个tld添加到一个新行上 为

好吧,我回来了,为你们中的一位出色的奇才准备了另一个无脑游戏,我一直在玩awk,但还没有完全弄明白这一点。因此,毫不拖延地说,这就是我试图解决的问题

我有两个文件

file1看起来这个实际文件有数百行随机字

somewebsite
someotherwebsite
somestinking
blahblah
foobar
file2看起来像这么多TLD,更多

.com.th
.co.uk
.com
.de
.ath.cx
好的,我需要文件1中的每一行将文件2中的每个tld添加到一个新行上

为了进一步说明,需要复制file1中的每一行,以便将file2中的每个tld添加到file1中的每个条目中

输出应该如下所示:

   somewebsite.com.th
   somewebsite.co.uk
   somewebsite.com
   somewebsite.de
   somewebsite.ath.cx
   someotherwebsite.com.th
   someotherwebsite.co.uk
   someotherwebsite.com
   someotherwebsite.de
   someotherwebsite.ath.cx
   somestinking.com.th
   somestinking.co.uk
   somestinking.com
   somestinking.de
   somestinking.ath.cx
   blahblah.com.th
   blahblah.co.uk
   blahblah.com
   blahblah.de
   blahblah.ath.cx
   foobar.com.th
   foobar.co.uk
   foobar.com
   foobar.de
   foobar.ath.cx
我希望这对某些人来说是有意义的,我正试图弄明白怎么做,我失败的所有方式都很有趣

先谢谢你。我相信我不是唯一一个在现在、过去或将来尝试过这种方法的人,所以一个解决方案肯定会帮助下一个尝试这样做的人。

在awk:

$ awk 'NR==FNR{a[$1];next}{for(i in a) print $1 i}' file2 file1
somewebsite.co.uk
somewebsite.de
somewebsite.com
somewebsite.ath.cx
somewebsite.com.th
...
由于in运算符的性质,TLD的输出顺序是随机的

或者只使用join和tr:

试试这个-

$head file?
==> file1 <==
somewebsite
someotherwebsite
somestinking
blahblah
foobar

==> file2 <==
.com.th
.co.uk
.com
.de
.ath.cx
$while read a; do while read b; do echo "$a$b"; done < file2; done < file1
somewebsite.com.th
somewebsite.co.uk
somewebsite.com
somewebsite.de
somewebsite.ath.cx
someotherwebsite.com.th
someotherwebsite.co.uk
.....
.....

这正是我所希望的,谢谢你用实用而优雅的答案回答了我的问题,非常感谢您,先生。@DerpderAlert-欢迎:请务必阅读,以了解不这样做的一些原因,例如,它效率极低,如果输入一些内容,将产生意外/不正确的输出。哦,天哪,我想知道如果我的一些作品看起来像some-website-with-dash.com或其他网站会发生什么。sucks@derpderpalert-如果您遇到任何问题/输出错误,请尝试使用上述命令并分享结果。您应该:1,而不是傲慢的赞扬。添加您的代码您尝试了什么,或2。只要说:我很懒,所以给我写个剧本吧。我真诚地请求帮助。那些类型的评论是不必要的。你应该阅读。在这里,我们帮助开发人员克服工作中的问题。您没有发布任何可以称为工作的内容,因此您甚至没有尝试解决问题。所以,你只是要求一个免费的开发者工作,却错过了网站的重点。无论如何-您可以只加入-j 2-t file1 file2,例如将-t-分隔符指定为空字符串。@jm666我确实尝试过,但我得到了一对对项目,它们相互重叠,并用空行分隔。对你有用吗?加入GNU coreutils 8.21Arghhh;-那么join的BSD版本就不同于GNU版本了。我使用OS X,所以在BSD中它可以工作,但你是对的-在GNU中join不能。@jm666在join GNU coreutils 8.22上工作。我认为,尝试在一个不存在的字段上加入,你处于最深、最黑暗的未定义行为领域,所以YMMV。至少我在join手册页或join手册页中找不到任何说明应该做什么的内容+但是awk只有一个。
$head file?
==> file1 <==
somewebsite
someotherwebsite
somestinking
blahblah
foobar

==> file2 <==
.com.th
.co.uk
.com
.de
.ath.cx
$while read a; do while read b; do echo "$a$b"; done < file2; done < file1
somewebsite.com.th
somewebsite.co.uk
somewebsite.com
somewebsite.de
somewebsite.ath.cx
someotherwebsite.com.th
someotherwebsite.co.uk
.....
.....