2つのディレクトリからリストに含まれるファイルをコピー

2つのディレクトリからリストに含まれるファイルをコピー

以下のプロセス
list1.txtに含まれるファイルは
行数1_s.csv からコピー
ディレクトリは../../list1dir/

list2.txtに含まれるファイルは
行数1_s.csv からコピー
ディレクトリは../../list2dir/

list3.txtに含まれるものかつほかのにキーが存在するものだけコピー

xxx ../../list2dir/32_s.csv ../../list1dir/12_s.csv -> ~/3_s.csv
yyy ../../list2dir/32_s.csv -> ~/3_s.csv
zzz ../../list1dir/12_s.csv -> ~/3_s.csv

f=open("list1.txt");

b=Hash::new();
k=1;
f.readlines.each{|i|
        i.chomp!
        q=i.split(" ")
        b[q[0]]=q[0]+" "+k.to_s;
        k=k+1;

}

f3=open("list2.txt");
a=Hash::new();

k=1;
f3.readlines.each{|i|
        i.chomp!
        q=i.split(" ")

        a[q[0]]=q[0]+" "+k.to_s;
        k=k+1;
}


f2=open("list3.txt");
k=1;
f2.readlines.each{|i|

        i.chomp!



        if a.has_key?(i) && b.has_key?(i) then
        #       puts "do        uble "+a[i].to_s+" "+b[i]
                c=a[i].split(" ");
                puts "cp ../../list1dir/"+c[1].to_s+"_s.csv"+" "+k.to_s+"_s.csv"
        end

        if a.has_key?(i) && !b.has_key?(i) then

                c=a[i].split(" ");

                puts "cp ../../list1dir/"+c[1].to_s+"_s.csv"+" "+k.to_s+"_s.csv"
                #puts "cp "+c[1].to_s+"_s.csv"+" "+k.to_s
        #       puts "cp shuff/"+a[i].to_s
        end


        if !a.has_key?(i) && b.has_key?(i) then


                c=b[i].split(" ");

                puts "cp ../../list2dir/"+c[1].to_s+"_s.csv"+" "+k.to_s+"_s.csv"

        #       puts "noun "+b[i].to_s
        end
        k=k+1;
}