루프에서 파일 쌍 연결

루프에서 파일 쌍 연결

두 개의 서로 다른 확장자로 끝나는 두 개의 파일 목록이 있고 이를 루프에서 쌍으로 연결하고 싶습니다. 파일 이름은 다음과 같습니다.

이것들은 파일이에요

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

두 개의 루프가 필요하지 않습니다. 루프, through 등이 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 

관련 정보