我有一組檔案:
Ursus_fibroblast_ACT_34_CT0_adak_HJ_EV_S45_L002_R1_001_val_1.fq.gzAligned.out.sam
Ursus_fibroblast_ACT_34_CT12_adak_HJ_EV_S49_L002_R1_001_val_1.fq.gzAligned.out.sam
Ursus_fibroblast_ACT_34_CT0_adak_HJ_EV_S45_L002_R1_001_val_1.fq.gzAligned.out.sam
Ursus_fibroblast_ACT_34_CT12_adak_HJ_EV_S49_L002_R1_001_val_1.fq.gzAligned.out.sam
Ursus_fibroblast_ACT_34_CT15_adak_HJ_EV_S50_L002_R1_001_val_1.fq.gzAligned.out.sam
我想只用這部分名稱加上擴展名“Aligned.out.sam”來重命名它們:
“ACT_34_CT15_adak_HJ_EV_S50” “ACT_34_CT12_adak_HJ_EV_S49”等等。
到目前為止,我有一個腳本的開始,但我不確定現在該做什么......我顯然是編碼新手,所以如果您需要更多資訊,請告訴我。
files={*.sam}
for i in $files
echo $i
mv -i $i
uj5u.com熱心網友回復:
如果您的檔案位于同一目錄中,則此命令將完成這項作業。
for x in *.sam; do mv $x ${x%.sam}.Aligned.out.sam;done
uj5u.com熱心網友回復:
while read file
do
target=${file//Ursus_fibroblast_}
target=${target//_L002*}
echo mv "$file" "$target.Aligned.out.sam" # this is an echo
done < <(find . -type f -name "*.sam")
mv ./Ursus_fibroblast_ACT_34_CT0_adak_HJ_EV_S45_L002_R1_001_val_1.fq.gzAligned.out.sam ./ACT_34_CT0_adak_HJ_EV_S45.Aligned.out.sam
mv ./Ursus_fibroblast_ACT_34_CT12_adak_HJ_EV_S49_L002_R1_001_val_1.fq.gzAligned.out.sam ./ACT_34_CT12_adak_HJ_EV_S49.Aligned.out.sam
mv ./Ursus_fibroblast_ACT_34_CT15_adak_HJ_EV_S50_L002_R1_001_val_1.fq.gzAligned.out.sam ./ACT_34_CT15_adak_HJ_EV_S50.Aligned.out.sam
uj5u.com熱心網友回復:
您可以使用 bash 正則運算式來捕獲感興趣的部分:
#!/bin/bash
for f in *.sam
do
[[ $f =~ ACT_[0-9] _CT[0-9] _adak_HJ_EV_S[0-9] ]] &&
mv "$f" "${BASH_REMATCH[0]}.Aligned.out.sam"
done
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/471554.html
