2017-07-28 13 views
1

私は2つのテキストファイルを持っています。一つ目は次のようになります。linuxのbashスクリプトを使って2つのテキストファイルをマージする

a 
b 
c 

別のファイルは次のようになります。私は最初のファイルの各行が可能になるように、これらの2つのファイルをマージするためのLinuxでのbashスクリプトを使用したい

1 2 
3 4 

第二のファイルと出力のすべての行の隣に置かれ、次のようになります。任意の助けをいただければ幸いです

a 1 2  
a 3 4 
b 1 2 
b 3 4 
c 1 2 
c 3 4 

+0

は、あなたがそうしようとしている何遠い?これは、2回組み込んだ 'while read 'ループやawkスクリプトを使って簡単にできるようなものです。 – Aserre

答えて

3

あなたはこのようなawkを使用することができます。

awk 'NR==FNR{a[++n]=$0; next} {for (i in a) print $0, a[i]}' file2 file1 

a 1 2 
a 3 4 
b 1 2 
b 3 4 
c 1 2 
c 3 4 

参考:純粋なシェルでEffective AWK Programming

+1

あなたの親切な助けをたくさんありがとう – user3891747

1

、あなたは、単に行うことができます。

#Usage: the_script FirstFile SecondFile 
while read -r l1; do 
    while read -r l2 ; do 
     echo "$l1 $l2" 
    done <"$2" 
done <"$1" 

が、ファイルが良い大きさではない、ので、シェルの読み込みはそれほど効率的ではありません(各バイトにシステムコールを行います)。

0

もう一度awkを実行して、Input_file1と同じ順序で出力します。

awk 'FNR==NR{a[++i]=$0;next} {c[++k]=$0} END{for(q=1;q<=i;q++){for(u=1;u<=k;u++){print a[q],c[u]}}}' Input_file1 Input_file2 
0

私はおそらく容赦なくをdownvotedされると思いますが、私はここでPython 2ソリューションですタスクのこれらの種類はPerlPython.
に適していると信じています:

$ cat 1col.tmp 
a 
b 
c 

$ cat 2col.tmp 
1 2 
3 4 

$ cat merge.py 
with open("1col.tmp") as col1f: 
    for c1 in col1f.readlines(): 
     with open("2col.tmp") as col2f: 
      for c2 in col2f.readlines(): 
       print c1.strip(), c2.strip() 

$ python merge.py 
a 1 2 
a 3 4 
b 1 2 
b 3 4 
c 1 2 
c 3 4 
関連する問題