다른 파일과의 부분 일치를 사용하여 디렉터리의 bash 파일 이름 바꾸기

다른 파일과의 부분 일치를 사용하여 디렉터리의 bash 파일 이름 바꾸기

data아래에서는 하위 디렉터리에 있는 각 IonCode_0000_파일 쌍 의 부분 일치를 기반으로 특정 실행에서 각 하위 폴더의 내용 이름을 바꾸려고 합니다 . 여러 실행이 있지만 각 실행 은 고유하며 이름 바꾸기 값은 및 에서 찾을 수 있습니다 . 아래 코드는 내가 생각하는 일에 대해 설명합니다. 감사해요:).data$1f1f1$uniqf1$2

set -x지금까지는 괜찮았지만 Rename from:IonCode_0404 to:00-0000-xxx-xxx-xxx IonCode_0402 11-1111-yy-yy-yyy왜 이런 일이 발생하는지, 어떻게 해결해야 하는지 잘 모르겠습니다. 긴 게시물에 대해 사과드립니다. 이 내용을 파악할 수 없기 때문에 모든 세부 정보를 포함하고 싶었습니다. 감사해요:).

데이터 내용 ---이름을 바꿀 파일 쌍입니다----

IonCode_0402_xxx_xxx_xxx.bam
IonCode_0402_xxx_xxx_xxx.bam.bai
IonCode_0404_xxx_xxx_xxx.bam
IonCode_0404_xxx_xxx_xxx.bam.bai

f1 --- 부분적으로 일치하는 파일의 이름을 ---에서 변경합니다.

IonCode_0404 00-0000-xxx-xxx-xxx
IonCode_0402 11-1111-yy-yy-yyy
R_2019_00_00_00_00_00_xxxx_xx1-127-xxx_xxx_xxx_xxx_xx_xx_xx

IonCode_0402 22-2222-zz-zzzz-zzz
R_2019_00_00_00_00_00_xxxx_xx1-126-xxx_xxx_xxx_xxx_xx_xx_xx

이름 변경 후 현재 다라 --- 한 쌍만 다음의 두 값으로 이름이 변경됩니다.f1

IonCode_0402_xxx.xxx_xxx.bam
IonCode_0402_xxx.xxx_xxx.bam.bai
00-0000-xxx-xxx-xxx IonCode_0402 11-1111-yy-yy-yyy_test.bam.bam
00-0000-xxx-xxx-xxx IonCode_0402 11-1111-yy-yy-yyy_test.bam.bam.bai

이름 변경 후 필요한 데이터

11-1111-yy-yy-yyy_test.bam
11-1111-yy-yy-yyy_test.bam.bai
00-0000-xxx-xxx-xxx_test.bam
00-0000-xxx-xxx-xxx_test.bam.bai

세게 때리다

set -x
dir=$1
for f in "$dir" ; do  ## operate on desired directory
  uniq=${dir##*/}  ## store run with no path as uniq
while read from to  ## start loop using from to
do
 (
   cd "$dir"/data  ## change directory to subfolder $from
   echo "Rename from:$from to:$to"  ## echo files
   for file in *.bam* 
   do
      newname=${file/$from*.bam/${to}_test.bam} ## rename adding text
      [ -f "$file" ] && [ "$newname" != "$file" ] && mv "$file" "$newname"  ## if names in uniq change file name
   done
 )
done <<<$(
   awk -F '\n' -v RS="" -v ref="$uniq" ' ## filter to this run in uniq
     $0 ~ ref {
         d=split($0, val); ## split on newline and space
         for(i=1;i<d;i++) print val[i];
      }' "$dir"/f1  
)  ## loop through f1 for unique run and populate from and to
done

관련 정보