Bashスクリプトを使用して2つのファイルを繰り返す方法

Bashスクリプトを使用して2つのファイルを繰り返す方法

それぞれ500個のファイルを含む2つのフォルダ(フォルダ1)があります。

HI.2622.001.Index_19.ED18_ND1W27-2_288_R1.fastq.gz_matches_default_numberalignment_per_read
HI.2622.001.Index_19.ED18_ND1W27-2_288_R2.fastq.gz_matches_default_numberalignment_per_read
HI.2622.001.Index_19.ED18_ND1W27-2_288_R3.fastq.gz_matches_default_numberalignment_per_read

そして他のフォルダ(フォルダ2)

HI.2622.001.Index_19.ED18_ND1W27-2_288_R1.fastq.gz_matches_default_filtered
HI.2622.001.Index_19.ED18_ND1W27-2_288_R2.fastq.gz_matches_default_filtered
HI.2622.001.Index_19.ED18_ND1W27-2_288_R3.fastq.gz_matches_default_filtered

フォルダ1の最初のファイルは、フォルダ2の最初のファイルに対応する式である。最初の列がファイル1の最初の列と一致するファイル2の行を維持したいと思います。単一のファイルであれば使いやすいでしょう。

awk 'FNR==NR {a[$1]; next}; $1 in a' file1 file2 > file_match 

ただし、500個のファイルがあるため、ループを介して実行する必要があります。両方のファイルを繰り返す方法がわかりません!どんな提案がありますか?ありがとう

ベストアンサー1

各フォルダのファイルを配列として保存します。

f1=( /path/to/folder1/* )
f2=( /path/to/folder2/* )

その後、配列の数値インデックスを繰り返します。

for idx in "${!f1[@]}"; do
    awk ... "${f1[$idx]}" "${f2[$idx]}" > "${f1[$idx]}.matched"
done

おすすめ記事