Bash 对于每一行,创建一个新行以附加来自另一个文件的多个条目
好吧,我回来了,为你们中的一位出色的奇才准备了另一个无脑游戏,我一直在玩awk,但还没有完全弄明白这一点。因此,毫不拖延地说,这就是我试图解决的问题 我有两个文件 file1看起来这个实际文件有数百行随机字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添加到一个新行上 为
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
.....
.....