2016-11-02 4 views
1

나는이름 바꾸기 파일

sample_exp_A1_A01 
sample_exp_A2_A02 
sample_exp_A3_A03 
sample_exp_A4_A04 
sample_exp_A5_A05 

라는 이름의 파일 세트를하고 난 다음 값 텍스트 파일을

A01 170 
A02 186 
A03 165 
A04 130 
A05 120 
내가 파일의 이름을 변경하고 싶은

FS_170_sample_exp_A1_A01 
FS_186_sample_exp_A2_A02 
FS_165_sample_exp_A3_A03 
FS_130_sample_exp_A4_A04 
FS_120_sample_exp_A5_A05 

같은 텍스트 파일의 값을 기준으로 그래서 오 A01에 따라 텍스트 파일의 ID와 일치 r A02 또는 A03 또는 A04 다음 해당 번호를 접두사로 파일 이름에 추가하십시오. 또한 위의 그림과 같이 모든 파일 이름 앞에 FS을 붙입니다.

내가 직접 그 일을 시도했지만 한 번에 하나 개의 파일에 대한 파일에 suffix 명명 된 사용자의 접미사를 가정

FS_170_sample_exp_A1_A01 

답변

6

을 얻을 수있는이 방법

rename 's/^/FS_170_/' *A01 

을 할 수있는, 당신이 할 수있는 이 :

for fname in sample*; do 
    echo mv "$fname" FS_"$(awk -v pf="${fname##*_}" \ 
     '$1 == pf {print $2}' suffix)"_"$fname" 
done 

그것은 모든 파일을 반복합니다. 루프에서, 그것은 suffix에서 라인 다음 FS_이이 AWK 변수 pf에 입력 파일 이름의 마지막 부분을 할당

awk -v pf="${fname##*_}" '$1 == pf {print $2}' suffix 

의 출력 등을 붙이는하여 새로운 파일명을 함께 넣는다 첫 번째 필드는 해당 변수와 일치하고 두 번째 필드를 인쇄합니다. 펄 호환 정규 표현식을 지원하는 GREP이있는 경우

또는, 대신 grep -Po "${fname##*_} \K.*" suffix을 사용할 수 있습니다 (가변 크기의 모양 숨김 사용 \K는) :

for fname in sample*; do 
    echo mv "$fname" FS_"$(grep -Po "${fname##*_} \K.*" suffix)"_"$fname" 
done 

이는 새 파일 이름에 추가됩니다 , 나머지 새 이름은 완전한 이전 이름입니다. 당신의 입력 파일의 경우

이는 echo은 제거되어야한다, 실제로 파일의 이름을 변경하려면

mv sample_exp_A1_A01 FS_170_sample_exp_A1_A01 
mv sample_exp_A2_A02 FS_186_sample_exp_A2_A02 
mv sample_exp_A3_A03 FS_165_sample_exp_A3_A03 
mv sample_exp_A4_A04 FS_130_sample_exp_A4_A04 
mv sample_exp_A5_A05 FS_120_sample_exp_A5_A05 

발생합니다. 첫 경기 후

awk -v pf="${fname##*_}" '$1 == pf {print $2; exit}' suffix 

또는 그렙 정지 :

grep -m 1 -Po "${fname##*_} \K.*" suffix 
suffix이 거대한입니다


경우, 첫 번째 경기 후 AWK 출구를함으로써이 문제를 가속화 할 수 있습니다