目的:
将SRR编号改成对应的名称。 比如SRR885007 修改成IgG_E7.75_embryo.
实际上就是按照文件里面对应关系,修改名称.
2020年4月23日15:16:17
构造一个例子:
比如将SRR001_R1.fq改成Test1_R1.fq
## touch 建立文件
touch SRR00{1..3}_R{1..2}.fq
kcao@DESKTOP-95JHONS:~/TMP_dir$ ll
total 0
drwxrwxrwx 1 kcao kcao 512 Apr 23 12:17 ./
drwxr-xr-x 1 kcao kcao 512 Apr 23 09:49 ../
-rw-rw-rw- 1 kcao kcao 0 Apr 23 12:17 SRR001_R1.fq
-rw-rw-rw- 1 kcao kcao 0 Apr 23 12:17 SRR001_R2.fq
-rw-rw-rw- 1 kcao kcao 0 Apr 23 12:17 SRR002_R1.fq
-rw-rw-rw- 1 kcao kcao 0 Apr 23 12:17 SRR002_R2.fq
-rw-rw-rw- 1 kcao kcao 0 Apr 23 12:17 SRR003_R1.fq
-rw-rw-rw- 1 kcao kcao 0 Apr 23 12:17 SRR003_R2.fq
## 文件名对应关系
kcao@DESKTOP-95JHONS:~/TMP_dir$ cat >match.tsv
SRR001 Test1
SRR002 Test2
SRR003 Ctrl1
方法1:linux 解决
ls *fq | while read id;do A=${id%_*};B=`grep $A match.tsv |awk '{print $2}' `;mv $id ${id/$A/$B};done
效果
2020年4月23日15:13:11
方法2:R
## Step1: 读取映射关系
> dat
> dict
> names(dict)
> dict
SRR001 SRR002 SRR003
Test1 Test2 Ctrl1
Levels: Ctrl1 Test1 Test2
## Step2:使用file.name 进行修改名称
> old.file.names
> new.file.names
# 新的命名规则,下例为所有文件统一加后缀,本部分可根据具体情况修改(修改这里)
new
return(new)
})
# 执行批量命名操作
file.rename(old.file.names,new.file.names)
思考:
尝试使用linux 数组来搞,发现ARR数组为空,为什么?.....
# linux 数组,
# ARR=();cat match.tsv |while read id;do tmp=($id);A=${tmp[0]};B=${tmp[1]};ARR[$A]=$B;echo $A,$B;done