2017-05-06 94 views
-3

對於其中一個精彩的嚮導,我已經玩弄了awk,並且還沒有完成這個計算出來。所以沒有進一步的延遲,這是我正在努力解決的問題。對於每一行,創建一個新行以添加來自另一個文件的多個條目

我有兩個文件

文件1看起來是這樣的(實際的文件中有數百行w的隨機單詞)

somewebsite 
someotherwebsite 
somestinking 
blahblah 
foobar 

文件2看起來是這樣的(許多頂級域名,多了很多)

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

好吧,我需要file1中的每一行,以便從一個新行上的file2中添加每個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 

我希望是有道理的給別人,我試着去弄清楚如何做到這一點,它肯定有趣所有的方法,我都失敗了。

預先感謝您。我相信我不是現在,過去或未來嘗試過這樣的人,所以一個解決方案肯定會幫助下一個嘗試這樣做的人。

+2

反而張狂的讚美,你應該:1)添加代碼,你有什麼企圖,或2。 )只是說:_im懶惰,所以給我一個腳本_。 – jm666

+0

我真的在尋求幫助。這些評論是不必要的。 – derpderpalert

+0

您應該閱讀[幫助]。在這裏,我們幫助開發人員克服工作中的問題你沒有發佈任何可稱爲「工作」的東西,因此你甚至沒有試圖解決這個問題。所以,你只需要一個免費的開發人員工作,並錯過了網站的重點。 – jm666

回答

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操作的性質。

或者只是使用join(和tr):

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

+++用於'join'。無論如何 - 你可以'加入-j 2 -t''file1 file2',例如指定'-t' - 分隔符爲空字符串。 – jm666

+0

@ jm666我確實嘗試過,但是我在eachother的頂部獲得了一些項目,並且用空行分隔了這些項目。它對你有用嗎? (加入(GNU coreutils)8.21) –

+1

Arghhh;( - 然後BSD版本的join與GNU不同,我在BSD中使用OS X,但是你是對的 - 在GNU join沒有。 – jm666

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 
..... 
..... 
+0

這正是我所希望的那樣,謝謝你回答我的問題與功能和優雅的答案,非常感謝你的問題先生。 – derpderpalert

+0

@derpderpalert - Welcome :) –

+0

請務必閱讀[爲什麼要使用shell循環處理文本考慮糟糕的做法](https://unix.stackexchange.com/questions/ 169716/why-is-using-a-shell-loop-to-process-text-considered-bad-practice)來理解一些不這樣做的原因(例如,它非常低效並且會產生意想不到的輸入)。 –

相關問題