我给你逐行、逐函数、逐符号把这段 Linux 脚本讲得清清楚楚,完全零基础也能听懂,你以后自己改脚本也能用。
# 1. 创建样本名称列表(自动识别所有样本)
samples=$(ls *.gz | cut -d'_' -f1-3 | sort | uniq)
# 2. 为每个样本创建文件夹 + 重命名三文件(Seurat标准格式)
for s in$samples; do
mkdir -p "$s"
mv"${s}_barcodes.tsv.gz""${s}/barcodes.tsv.gz" 2>/dev/null
mv"${s}_features.tsv.gz""${s}/features.tsv.gz" 2>/dev/null
mv"${s}_matrix.mtx.gz""${s}/matrix.mtx.gz" 2>/dev/null
done
# 3. 删除无用压缩包
rm -f GSE222703_RAW.tar
# 4. 查看整理结果
echo -e "\n==== 整理完成!当前目录结构 ===="
ls -lasamples=$(ls *.gz | cut -d'_' -f1-3 | sort | uniq)ls *.gz.gz 结尾的文件GSM6929206_p022_Tumoral_barcodes.tsv.gzcut -d'_' -f1-3cut:切割字符串,按分隔符拆分文件名-d'_':用下划线 _ 当分隔符f1-3:只保留第1~3段 GSM6929206_p022_Tumoral_barcodes.tsv.gz
→ 切割成:GSM6929206 p022 Tumoral barcodes.tsv.gz
→ 保留前3段:GSM6929206_p022_Tumoralsort | uniqsort:排序uniq:去重(每个样本只保留1次)samples=$(...)samples 里 GSM6929206_p022_Tumoral
GSM6929207_p022_Juxta
GSM6929208_p027_Tumoral
...for s in$samples; do
donefor s in $samplesss=GSM6929206_p022_Tumorals=GSM6929207_p022_Juxtamkdir -p "$s"mkdir:创建文件夹-p:如果文件夹已存在,不报错(安全)"$s":用当前样本名当文件夹名 mkdir GSM6929206_p022_Tumoralmv"${s}_barcodes.tsv.gz""${s}/barcodes.tsv.gz" 2>/dev/nullmv = move,移动 + 重命名${s}_xxxs 和后缀拼接 s=GSM6929206_p022_Tumoral
→ ${s}_barcodes.tsv.gz
→ GSM6929206_p022_Tumoral_barcodes.tsv.gz ${s}/barcodes.tsv.gzbarcodes.tsv.gz2>/dev/nullrm -f GSE222703_RAW.tarrm:删除-f:强制删除,不提示、不报错echo -e "\n==== 整理完成!===="
ls -laecho:打印文字ls -la:显示目录结构,让你看到整理好的文件夹自动识别所有样本 → 给每个样本建独立文件夹 → 把三个测序文件移动进去并重命名为 Seurat 能识别的标准名称
cut 按分隔符切字符串for 循环 批量处理文件mv 移动+重命名$s 动态使用文件名2>/dev/null 屏蔽错误cut -d'_' -f1-3 → 提取样本名for s in $samples → 批量循环处理每个样本mv 原文件 目标文件夹/标准名 → 改成 Seurat 可读格式👉 福利链接(复制到浏览器打开):
https://dayu.xiyoucloud.net/dayu/api/v1/anonymous/affiliate/ddssxsx
注意:必须通过以上连接进行服务器试用或购买,购买请输入优惠码:ddssxsx
当场立减200元!!!
📖 详细使用教程:
https://aomoow1hlm.feishu.cn/wiki/wikcnfjsymUiPf6ZEJmAZk8BYGe#Wy6kdeoyuoMqaox66k2csws1ngh