批量重命名:linux不会,不如用R吧
今天是生信星球陪你的第391天
大神一句话,菜鸟跑半年。我不是大神,但我可以缩短你走弯路的半年~
就像歌儿唱的那样,如果你不知道该往哪儿走,就留在这学点生信好不好~
这里有豆豆和花花的学习历程,从新手到进阶,生信路上有你有我!
花花写于2019.6.11 呼呼哈哈。明天我要带豆豆肥家了,他还特意去理了个发。我有一个超nice的师妹可以帮我搞定毕业各项手续,静等过几天回来参加毕业典礼。我有一个超nice的老板,允许我天南海北异地办公不扣工资,好嗨呦。
问题
今天老板抛了一道题给所有的学习者,用linux实现指定的重命名,题目是这样:
根据下面的对应关系,首先 touch这些gz文件出来,然后 shell脚本改名
比如 SRR6269851_1.fastq.gz 改名为 P3_DCIS_Exome_1.fastq.gz
以此类推Library_Name Run
P3_DCIS_Exome SRR6269851
P4_DCIS_Exome SRR6269852
P1_DCIS_Exome SRR6269853
P2_DCIS_Exome SRR6269854
P7_DCIS_Exome SRR6269855
P5_DCIS_Exome SRR6269856
P8_DCIS_Exome SRR6269857
P6_DCIS_Exome SRR6269858
P10_DCIS_Exome SRR6269859
P9_DCIS_Exome SRR6269860
P3_INV_Exome SRR6269861
P4_INV_Exome SRR6269862
P2_INV_Exome SRR6269863
P1_INV_Exome SRR6269864
P7_INV_Exome SRR6269865
P8_INV_Exome SRR6269866
P5_INV_Exome SRR6269867
P6_INV_Exome SRR6269868
P9_INV_Exome SRR6269869
P10_INV_Exome SRR6269870
P10_Norm_Exome SRR6269871
P9_Norm_Exome SRR6269872
P4_Norm_Exome SRR6269873
P3_Norm_Exome SRR6269874
P2_Norm_Exome SRR6269875
P1_Norm_Exome SRR6269876
P8_Norm_Exome SRR6269877
P7_Norm_Exome SRR6269878
P6_Norm_Exome SRR6269879
P5_Norm_Exome SRR6269880
思路
我好像没有长linux的脑回路。想到的是R语言for循环一圈搞定。。。。。
1.由于没有原始数据,所以批量生成文件,linux用touch,R可以用write.table(应该有别的函数吧,我试了一下可以就是可以。)
2.linux的遍历是ls,R是dir(),可以用partten参数结合正则表达式选择性显示文件。
3.linux的改名是mv函数,R是file.rename
4.然后就是for循环走起
动手!
30个太多。循环之前先用三个数据试一下。
直接手动在这里新建三个空文件,命名为a.txt,b.txt,c.txt。没有内容没关系,我们要的是文件名。


试着把这三个名字改成大写的,”A.txt” “B.txt” “C.txt”。
将要修改的旧文件名存为向量x,新文件名存为向量y
x=dir(pattern = "*.txt");x
#[1] "a.txt" "b.txt" "c.txt"
y=paste0(LETTERS[1:3],".txt");y
#[1] "A.txt" "B.txt" "C.txt"
一个for循环,直接打哭
for (i in 1:length(x)){
file.rename(x[[i]],y[[i]])
}
已经完成。看看右下角的file框,或者代码查看
dir(pattern = "*.txt")
[1] "A.txt" "B.txt" "C.txt"
循环畅通,那么30个就不成问题了。
乾坤大挪移
把题目里的两列文件名存为一个toc.txt,然后读取它。
思路是一样的。一顿操作猛如虎,还好没有原地杵。
x=read.table("toc.txt",header = T);head(x)
# Library_Name Run
# 1 P3_DCIS_Exome SRR6269851
# 2 P4_DCIS_Exome SRR6269852
# 3 P1_DCIS_Exome SRR6269853
# 4 P2_DCIS_Exome SRR6269854
# 5 P7_DCIS_Exome SRR6269855
# 6 P5_DCIS_Exome SRR6269856
for (i in 1:nrow(x)){
write.table(x[i,1],file=paste0(x[i,2],".fastq.gz"))
}
test=dir(pattern = "SRR*");head(test)
# [1] "SRR6269851.fastq.gz"
# [2] "SRR6269852.fastq.gz"
# [3] "SRR6269853.fastq.gz"
# [4] "SRR6269854.fastq.gz"
# [5] "SRR6269855.fastq.gz"
# [6] "SRR6269856.fastq.gz"
y=paste0(x[,1],".fastq.gz");head(y)
# [1] "P3_DCIS_Exome.fastq.gz"
# [2] "P4_DCIS_Exome.fastq.gz"
# [3] "P1_DCIS_Exome.fastq.gz"
# [4] "P2_DCIS_Exome.fastq.gz"
# [5] "P7_DCIS_Exome.fastq.gz"
# [6] "P5_DCIS_Exome.fastq.gz"
for (i in 1:length(test)) {
file.rename(test[[i]],y[[i]])
}
dir(pattern = "*.fastq.gz")
# [1] "P1_DCIS_Exome.fastq.gz"
# [2] "P1_INV_Exome.fastq.gz"
# [3] "P1_Norm_Exome.fastq.gz"
# [4] "P10_DCIS_Exome.fastq.gz"
# [5] "P10_INV_Exome.fastq.gz"
# [6] "P10_Norm_Exome.fastq.gz"
# [7] "P2_DCIS_Exome.fastq.gz"
# [8] "P2_INV_Exome.fastq.gz"
# [9] "P2_Norm_Exome.fastq.gz"
# [10] "P3_DCIS_Exome.fastq.gz"
# [11] "P3_INV_Exome.fastq.gz"
# [12] "P3_Norm_Exome.fastq.gz"
# [13] "P4_DCIS_Exome.fastq.gz"
# [14] "P4_INV_Exome.fastq.gz"
# [15] "P4_Norm_Exome.fastq.gz"
# [16] "P5_DCIS_Exome.fastq.gz"
# [17] "P5_INV_Exome.fastq.gz"
# [18] "P5_Norm_Exome.fastq.gz"
# [19] "P6_DCIS_Exome.fastq.gz"
# [20] "P6_INV_Exome.fastq.gz"
# [21] "P6_Norm_Exome.fastq.gz"
# [22] "P7_DCIS_Exome.fastq.gz"
# [23] "P7_INV_Exome.fastq.gz"
# [24] "P7_Norm_Exome.fastq.gz"
# [25] "P8_DCIS_Exome.fastq.gz"
# [26] "P8_INV_Exome.fastq.gz"
# [27] "P8_Norm_Exome.fastq.gz"
# [28] "P9_DCIS_Exome.fastq.gz"
# [29] "P9_INV_Exome.fastq.gz"
# [30] "P9_Norm_Exome.fastq.gz"
豆豆用linux写了答案的。小伙伴们会用linux做吗?
简书:小洁忘了怎么分身
隔壁生信技能树公益视频合辑(学习顺序是linux,r,软件安装,geo,小技巧,ngs组学!)
国内看B站,教学视频链接:https://m.bilibili.com/space/338686099
国外看YouTube,教学视频链接:https://m.youtube.com/channel/UC67sImqK7V8tSWHMG8azIVA/playlists友情链接:
点击底部的“阅读原文”,获得更好的阅读体验哦😻
初学生信,很荣幸带你迈出第一步。
我们是生信星球,一个不拽术语、通俗易懂的生信知识平台。由于是2018年新号,竟然没有留言功能。需要帮助或提出意见请后台留言、联系微信或发送邮件到jieandze1314@gmail.com,每一条都会看到的哦~
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!