아래에 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