異なるファイル内のペアの単語のすべての可能な置換

異なるファイル内のペアの単語のすべての可能な置換

file1、file2など、いくつかのファイルがあります。各ファイルには1行に1単語があります。たとえば、次のようになります。

file1 file2 file3
one   four  six
two   five
three

私が望むのは、すべての可能な順列(繰り返しなし)で新しいファイル4にペアで結合することです。良い

onetwo
onethree
onefour
onefive
...
twothree
...
onefour
...
fourone
...

Linuxコマンドを使用してこれはどのように可能ですか?

ベストアンサー1

Rubyはこの種の仕事に適した簡潔な言語です。

ruby -e '
  words = ARGV.collect {|fname| File.readlines(fname)}.flatten.map(&:chomp)
  words.combination(2).each {|pair| puts pair.join("")}
' file[123] > file4
onetwo
onethree
onefour
onefive
onesix
twothree
twofour
twofive
twosix
threefour
threefive
threesix
fourfive
foursix
fivesix

そうですね。combination"onetwo"が提供されましたが、"twoone"がありません。良いものがあります。permutation

ruby -e '
  words = ARGV.collect {|fname| File.readlines(fname)}.flatten.map(&:chomp)
  words.permutation(2).each {|pair| puts pair.join("")}
' file{1,2,3}
onetwo
onethree
onefour
onefive
onesix
twoone
twothree
twofour
twofive
twosix
threeone
threetwo
threefour
threefive
threesix
fourone
fourtwo
fourthree
fourfive
foursix
fiveone
fivetwo
fivethree
fivefour
fivesix
sixone
sixtwo
sixthree
sixfour
sixfive

おすすめ記事