정보 파일에서 bash의 파일 이름 바꾸기

정보 파일에서 bash의 파일 이름 바꾸기

아래에 4개의 파일이 있는 디렉토리가 있습니다.

ERR315336_1.fastq.gz  ERR315336_2.fastq.gz  ERR315337_1.fastq.gz  ERR315337_2.fastq.gz

또한 info.txt라는 sep 파일에 이 4개 파일에 대한 정보 파일을 제공했습니다.

placenta_6c      placenta_6c_ERR315336_1.fastq.gz    ERR315336_1.fastq.gz
placenta_6c      placenta_6c_ERR315336_2.fastq.gz    ERR315336_2.fastq.gz
thyroid_5b   thyroid_5b_ERR315337_1.fastq.gz     ERR315337_1.fastq.gz
thyroid_5b   thyroid_5b_ERR315337_2.fastq.gz     ERR315337_2.fastq.gz

info.txt 파일에서 디렉터리에 있는 파일의 이름을 변경하고 싶습니다. 따라서 이름을 변경한 후 내 디렉터리는 다음과 같아야 합니다.

 placenta_6c_ERR315336_1.fastq.gz 
 placenta_6c_ERR315336_2.fastq.gz 
 thyroid_5b_ERR315337_1.fastq.gz 
 thyroid_5b_ERR315337_2.fastq.gz

그래서 기본적으로 기다려 ERR315336_1.fastq.gz to placenta_6c_ERR315336_1.fastq.gz 주세요. 나는 거대한 정보 목록 파일을 가지고 있습니다. 어떻게 해야 하나요?

감사해요

답변1

서투르게:

cd directory-with-files
awk '{system("echo mv " $3 " " $2)}' < /path/to/info.txt

bash-edly:

cd directory-with-files
while read -r junk new old
do
  echo mv "$old" "$new"
done < /path/to/info.txt

괜찮아 보일 때 에코를 제거하십시오.

파일 이름의 공백이나 파일 이름의 따옴표에 대한 오류 검사는 수행되지 않습니다.

답변2

$ while read -r c1 c2 c3; do echo mv "$c3" "$c2"; done < info.txt
mv ERR315336_1.fastq.gz placenta_6c_ERR315336_1.fastq.gz
mv ERR315336_2.fastq.gz placenta_6c_ERR315336_2.fastq.gz
mv ERR315337_1.fastq.gz thyroid_5b_ERR315337_1.fastq.gz
mv ERR315337_2.fastq.gz thyroid_5b_ERR315337_2.fastq.gz
  • info.txt파일을 한 줄씩 읽고 3개의 필드를 저장합니다(공백/탭 구분 가정).
  • echo시운전용으로 사용하시고 문제없으면 제거해주세요
  • 추가 자료:http://mywiki.wooledge.org/BashFAQ/001

관련 정보