2017-02-10 3 views
0

ファイル1:N組み合わせ、シンプルなbashの

1F 
2F 
3F 
4F 
5f 

がファイル2:

1F 
2F 
3F 
4F 
5f 

私はすべての可能な組み合わせを生成する簡単なコード

#!/bin/bash 
    for a in $(awk '{print $1}' intf1) 
    do 
     for b in $(awk '{print $1}' intf2) 
     do 
      echo -e "$a:$b" >> file 
     done 
    done 

これの出力を持っていますコード:

1F:1F 
1F:2F 
1F:3F 
1F:4F 
2F:1F 
etc 

しかし、私はしたいと思います:

1)完全に繰り返し

2を避けるため)(彼は第二のファイルから取得されますワード(行)の数)「の数を選択」:

第二のファイルの各2行:

1F:2F 
1F:3F 
2F:3F 
2F:4F 
3F:4F 
3F:5F 
4F:5F 

第二のファイルの各三行:

1F:2F 
1F:3F 
1F:4F 
2F:3F 
2F:4F 
2F:5F 
etc.. 

そしてなど

+0

あなたの望む結果は何ですか?私はリクエスト#2と#3を理解していません。私はより小さいが、完全な例を作ることを提案する – NinjaGaiden

+0

私はテキストを単純化し、長すぎるテキストは人々を混乱させる – Jonh

答えて

0

ファイルがソートされた(と行を繰り返し除外)することができれば、これは仕事ができる:

printf "%s\n" $(eval "echo {$(sort -u file.txt | paste -sd, -)}:{$(sort -u file2.txt | head -2 | paste -sd, -)}") | sort -u 

それは次のように、組み合わせを生成するために、bashの拡張を使用しています。

$ echo {a,b}{X,Y,Z} 
aX aY aZ bX bY bZ 

また、コードが危険なevalを使用しているため、絶対にファイルの内容を信頼する必要があります。

head head -2等の引数は、次の(2つの既にソートラインへの第2のファイルを制限することによって)コードを生成 file2.txt

から行のcoundを制限するために使用することができる

20160702F:20160702F 
20160702F:20160714F 
20160714F:20160702F 
20160714F:20160714F 
20160807F:20160702F 
20160807F:20160714F 
20160819F:20160702F 
20160819F:20160714F 
20160831F:20160702F 
20160831F:20160714F 
20160912F:20160702F 
20160912F:20160714F