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

时间:2017-05-06 10:11:22

标签: bash awk sed

好的,我和你们其中一个精彩的巫师一起回来了,我一直在玩awk,并且还没有弄明白。所以没有进一步的延迟,这是我试图解决的问题。

我有两个文件

file1看起来像这样(实际文件有数百行w随机字)

somewebsite
someotherwebsite
somestinking
blahblah
foobar

file2看起来像这样(许多tlds,更多)

.com.th
.co.uk
.com
.de
.ath.cx

好的,我需要file1中的每一行让每个tld从file2添加到新行....

进一步详细说明,需要复制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

我希望这对某些人有意义,我试图弄清楚如何做到这一点,它确实在我失败的所有方面都很有趣。

提前谢谢你。我确信我不是现在,过去或将来都尝试过这一点的唯一人,因此解决方案肯定会帮助下一个尝试这样做的人。

2 个答案:

答案 0 :(得分:3)

在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运算符的性质,tlds出来的顺序是随机的。

或者只使用join(和tr):

$ join  -j 2 file1 file2 | tr -d ' '
somewebsite.com.th
somewebsite.co.uk
somewebsite.com
somewebsite.de
...

答案 1 :(得分:0)

试试这个 -

$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
.....
.....