ループ内のファイルペアの関連付け

ループ内のファイルペアの関連付け

2つの異なる拡張子で終わる2つのファイルのリストがあり、ループからペアにリンクしたいと思います。ファイル名は次のとおりです。

これらはファイルです。

a.ID, b.ID, c.ID, d.ID     
a.value, b.value, c.value, d.value  

直感的に私はそうします:

for i in *.ID;  
do  
     for j in *.value;  
do  
     cat $i $j > $i.txt ; done  
done  

問題は、私がa.IDとマージしてa.valueランダムにマージしたいということです。などのように.. b.IDb.valuea.valueb.ID

どんなアイデアがありますか?事前にありがとう

入力サンプルa.ID(例):

chr1_237301_237601  176 1  
chr1_237601_237901  176 1  
chr1_237901_238201  176 1 

例はa.value次で終わります。

chr1_1_301      0   0  
chr1_301_601    0   0  
chr1_601_901    0   0  
chr1_901_1201   0   0  
chr1_1201_1501  0   0  

出力:

chr1_237301_237601  176 1    
chr1_237601_237901  176 1   
chr1_237901_238201  176 1  
chr1_1_301      0   0    
chr1_301_601    0   0   
chr1_601_901    0   0  
chr1_901_1201   0   0  
chr1_1201_1501  0   0

答え1

2つのループは必要ありません。ループ、スルーなどがa必要です。このように:bc

for i in *.ID; do
    b=${i%%.ID}
    cat "$i" "$b".value >"$b".txt
done

答え2

これができるので、ここにfind+bashメソッドがあります。

$ ls
a.ID  a.value

$ find -type f -iname "*.ID" -exec bash -c 'base=$(basename -s ".ID" "$@");cat "$@" "$base".value > "$base".merged' sh   "{}" \;

$ ls
a.ID  a.merged  a.value

$ cat a.merged                                                                                                           
chr1_237301_237601  176 1  
chr1_237601_237901  176 1  
chr1_237901_238201  176 1 
chr1_1_301      0   0  
chr1_301_601    0   0  
chr1_601_901    0   0 

関連情報