Linux根据新旧文件名一一对应的表格批量循环修改文件名
从TCGA上下载的
①sample sheet文件包含file name,file ID 和对应sample type
②gdc download文件含有counts和FPKM的两个文件
③clinical文件:含有case submitter id和一些临床数据。这里的case id和file id不同
根据gdc download文件中manifest文件中的file ID(如0096f6b3-94f5-49d9-aa43-66d9ab6b2b5c),去sample sheet中查找该ID对应的sample ID(如TCGA-AA-3979-01A),将以file ID命名的一千多个文件全部转换成对应的以sample ID命名的文件。
即:
用shell写循环:文件重命名
思路
①将文件名作为可以被awk使用的变量,这里用了选项-v
②如果sample sheet表格中存在与旧文件名相同的,将其对应的新文件名输出为外界变量。这里用了eval命令(会首先完成命令行所有的赋值替换,然后再执行命令行)。
③mv命令完成重命名
图片:
代码
#!/bin/bash
for file in `ls | grep .counts`
do
eval $(awk -v FILENAME="$file" -F"\t" '{if($2==FILENAME)printf("newfilename=%s\n",$7) }' ./tryname.tsv)
mv $file $newfilename
done