我注意到一个现象,现在的小年轻其实并不想下苦功夫在生物信息学基础编程能力的培养上面了,因为大家都以为有了人工智能大模型就可以基于对话编程。
比如如果拿到了如下所示的多个样品的空间单细胞文件:
ls -lh *gz|cut -d" " -f 6-|head
14M 6 13 2024 GSM8452847_Pt-1A_spatial.tar.gz
16M 6 13 2024 GSM8452848_Pt-1B_spatial.tar.gz
15M 6 13 2024 GSM8452849_Pt-1C_spatial.tar.gz
13M 6 13 2024 GSM8452850_Pt-2A_spatial.tar.gz
14M 6 13 2024 GSM8452851_Pt-2B_spatial.tar.gz
10M 6 13 2024 GSM8452852_Pt-2C_spatial.tar.gz
16M 6 13 2024 GSM8452853_Pt-3A_spatial.tar.gz
12M 6 13 2024 GSM8452854_Pt-3B_spatial.tar.gz
13M 6 13 2024 GSM8452855_Pt-3C_spatial.tar.gz
17M 6 13 2024 GSM8452856_Pt-4A_spatial.tar.gz
因为是13个病人的55个空间单细胞,如果一个个手动操作还是蛮累的!
当然是可以让人工智能大模型给出了一个简单的Linux命令解压每个样品,比如下面给出最简洁、可复用的 shell 一行命令,把
GSM8452847_Pt-1A_spatial.tar.gz解压到新建的文件夹 GSM8452847_Pt-1A(如果该文件夹已存在则直接退出,避免误覆盖):
#!/usr/bin/env bash
set -euo pipefail
ARCHIVE="GSM8452847_Pt-1A_spatial.tar.gz"
TARGET_DIR="GSM8452847_Pt-1A"
# 如果目标目录已存在则安全退出
[ -d "$TARGET_DIR" ] && { echo"目录 $TARGET_DIR 已存在,中止操作。"; exit 1; }
# 新建目录并解压
mkdir "$TARGET_DIR" &&
tar -xzf "$ARCHIVE" -C "$TARGET_DIR" --strip-components=1
需要把上面的代码内容保存为 unpack.sh,chmod +x unpack.sh后执行即可。 其中 --strip-components=1会把压缩包内的顶层目录去掉,让文件直接落在新建目录下;如不需要可去掉该参数。
然后继续跟人工智能大模型对话,做批量的操作:
批量解压全部的gz后缀文件:
下面给出批量处理当前目录下所有 *.tar.gz的脚本: 每个压缩包都会自动创建同名(去掉 _spatial.tar.gz后缀)的新文件夹,并把内容解压进去,规则与你举例一致。
#!/usr/bin/env bash
# 批量解压 *_spatial.tar.gz → 同名文件夹
set -euo pipefail
for gz in *_spatial.tar.gz; do
# 去掉后缀拿到目标目录名
dir=${gz%_spatial.tar.gz}
# 防冲突:目录已存在则跳过
[[ -d "$dir" ]] && { echo"跳过:$dir 已存在"; continue; }
# 新建目录并解压
mkdir "$dir"
tar -xzf "$gz" -C "$dir" --strip-components=1
echo"完成:$gz → $dir"
done
使用方法
- 放在存放
_spatial.tar.gz的目录里执行 ./batch_unzip.sh即可。
最后就拿到了整理好了的每个样品的空间单细胞文件架构,如下所示:
% tree -h |head -20
[1.9K] .
├── [ 256] GSM8452847_Pt-1A
│ ├── [1.6M] aligned_fiducials.jpg
│ ├── [2.1M] detected_tissue_image.jpg
│ ├── [ 157] scalefactors_json.json
│ ├── [9.6M] tissue_hires_image.png
│ ├── [1.0M] tissue_lowres_image.png
│ └── [186K] tissue_positions_list.csv
├── [ 256] GSM8452848_Pt-1B
│ ├── [1.7M] aligned_fiducials.jpg
│ ├── [2.2M] detected_tissue_image.jpg
│ ├── [ 148] scalefactors_json.json
│ ├── [ 11M] tissue_hires_image.png
│ ├── [1.1M] tissue_lowres_image.png
│ └── [186K] tissue_positions_list.csv
可是,如果完全没有学过Linux, 如何知道自己的电脑可以开启终端,如何知道需要把代码写入到文件后运行呢?