注:所有学习材料来自生信技能树(卖萌哥主讲,豆包整理补充,纯实战导向)
内容比较详细,自己使用为主!!
一、核心学习目标
掌握生信分析中90%的文本处理基础操作,能够独立完成测序数据(fastq/gtf/bed等)的查看、筛选、统计和简单编辑,为后续转录组、基因组分析打下基础。
✅ 生信人必须掌握的核心能力:
二、前置必懂:Linux文本处理的灵魂
1. 管道符 |
作用:把前一个命令的标准输出,作为后一个命令的标准输入
语法:命令1 | 命令2 | 命令3 ...
✅ 这是Linux最强大的功能,所有复杂的文本处理都是用管道符把简单命令组合起来的。
2. 重定向 >
作用:把命令的输出写入到文件中,而不是显示在屏幕上
语法:命令 > 输出文件名
⚠️ 注意:如果文件已存在,会直接覆盖原文件,不会提示!
第一部分:文本查看命令
1. cat:一次性输出整个文件内容
英文全称:Concatenate
适用场景:查看小文件(<100行),不适合查看大文件(会把整个文件滚动输出到屏幕,卡死终端)
常用参数
实战用法
# 1. 查看小文件内容
cat readme.txt
# 2. 查看并显示行号
cat -n readme.txt
# 3. 新建文件并写入内容(按Ctrl+C结束输入)
cat > test.txt
Welcome to Biotrainee()!
这是一个测试文件
^C # 这里是按Ctrl+C,不是输入^C
# 4. 合并多个文件
cat file1.txt file2.txt > merged.txt
生信专属命令:zcat
作用:不用解压直接查看.gz格式的压缩文件
✅ 生信中99%的测序数据都是.gz压缩的,永远不要解压!用zcat直接操作,节省大量磁盘空间和时间
# 查看压缩的fastq文件
zcat reads.1.fq.gz
2. head / tail:查看文件的开头/结尾
适用场景:快速预览大文件的结构,不用打开整个文件
默认行为:不加参数时,显示前10行/后10行
常用参数
核心实战技巧:查看文件的中间某几行
✅ 这是本节课最重要的技巧,也是你问的第4题的答案!
原理:先用head取前N行,再用tail从这N行里取最后M行,得到的就是第(N-M+1)到N行
# 通用公式:查看第a行到第b行
head -n b 文件名 | tail -n $((b - a + 1))
# 示例1:查看reads.1.fq.gz的第11到12行(你的作业题)
zcat reads.1.fq.gz | head -n 12 | tail -n 2
# 示例2:查看example.fq的第20行
head -n 20 Data/example.fq | tail -n 1
# 示例3:查看example.fq的第50到100行
head -n 100 Data/example.fq | tail -n 51
其他用法
# 查看example.fq的前20行
head -n 20 Data/example.fq
# 查看.bashrc的最后10行(默认)
tail ~/.bashrc
# 实时查看日志文件的更新(按Ctrl+C退出)
tail -f nohup.out
3. less:分页查看大文件(生信最常用)
英文全称:less is more(比more更强大)
适用场景:查看任何大小的文件,特别是GB级别的测序数据
✅ 老师原话:"生信人90%的时间都在用less看文件,永远不要用cat看大文件!"
常用参数
常用操作(打开文件后)
实战用法
# 1. 普通查看
less Data/example.fq
# 2. 生信标准用法:单行显示+行号
less -SN Data/example.gtf
# 3. 不用解压直接查看.gz压缩文件(zless = zcat | less)
zless -N Data/reads.1.fq.gz
4. more:分页查看(了解即可)
功能和less类似,但更简单,没有向上翻页和搜索功能,现在几乎被less取代,了解即可。
第二部分:文本简单处理命令
1. wc:统计文本信息
英文全称:Word Count
作用:统计文件的行数、单词数、字节数
✅ 生信中最常用的是统计行数,比如统计fastq文件的行数来计算reads数量
常用参数
| | |
|---|
-l | | 统计测序数据的reads数(fastq每4行一个reads) |
-w | | |
-c | | |
实战用法
# 1. 统计readme.txt的所有信息(行数 单词数 字节数)
wc readme.txt
# 2. 只统计行数(最常用)
wc -l readme.txt
# 3. 统计fastq文件的reads数(行数除以4)
zcat reads.1.fq.gz | wc -l
# 输出:1000000 → 共有250000条reads
# 4. 管道符用法:统计gtf文件中基因的数量
less Data/example.gtf | cut -f 3 | grep -c "gene"
2. cut:文本切割(提取指定列)
作用:按指定分隔符切割文本,提取指定的列
✅ 生信中最常用的命令之一,用来提取gtf、bed、vcf等表格文件的指定列
常用参数
实战用法
# 1. 提取gtf文件的第1列(染色体)、第3列(特征类型)、第4-5列(起始-终止位置)
less -S Data/example.gtf | cut -f 1,3-5
# 2. 按'h'分隔,提取第1列
less -S Data/example.gtf | cut -d 'h' -f 1
# 3. 提取gtf文件的第9列(属性列)
less -S Data/example.gtf | cut -f 9
3. sort:文本排序
作用:对文本的行进行排序
✅ 必须和uniq配合使用,因为uniq只能去除连续的重复行
常用参数
实战用法
# 1. 按gtf文件的第4列(起始位置)排序(默认按字符串排序,错误)
less -S Data/example.gtf | sort -k 4 | less -S
# 2. 按gtf文件的第4列**数值**排序(正确)
less -S Data/example.gtf | sort -n -k 4 | less -S
# 3. 按第3列倒序排序
less -S Data/example.gtf | sort -r -k 3 | less -S
4. uniq:去除重复行
作用:去除连续的重复行
⚠️ 最重要的坑:uniq只能去除连续的重复行!所以必须先sort排序,让重复行挨在一起,再用uniq去重
常用参数
实战用法
# ❌ 错误用法:不先sort,结果完全错误
less -S Data/example.gtf | cut -f 3 | uniq
# ✅ 正确用法:先sort,再uniq
less -S Data/example.gtf | cut -f 3 | sort | uniq
# ✅ 统计每个特征类型出现的次数(生信最常用)
less -S Data/example.gtf | cut -f 3 | sort | uniq -c
# 输出示例:
# 29 CDS
# 111 exon
# 20 gene
# 7 start_codon
# 9 stop_codon
# 34 transcript
# 27 UTR
5. paste:文本合并
作用:按行合并多个文件,或者把多行合并成一行
常用参数
实战用法
# 1. 按行合并两个文件
paste file1.txt file2.txt > merged.txt
# 2. 生信经典用法:把fastq的每4行合并成一行(方便处理)
less -S Data/example.fq | paste - - - - | less -S
6. tr:字符替换
作用:单个字符的一对一替换、删除、压缩
✅ 只能处理单个字符,不能处理字符串
常用参数
实战用法
# 1. 把所有小写e替换成大写E
cat readme.txt | tr 'e''E'
# 2. 把所有换行符替换成制表符
cat readme.txt | tr '\n''\t'
# 3. 删除所有的'e'字符
cat readme.txt | tr -d 'e'
# 4. 压缩连续的空格为单个空格
cat file.txt | tr -s ' '
第三部分:vim编辑器
vim是Linux系统自带的文本编辑器,功能强大,是生信人修改脚本、配置文件的必备工具。
⚠️ 新手最懵的地方:vim有三种模式,不同模式下的操作完全不同
1. vim的三种模式
打开文件 → 默认进入【命令模式】
↓ 按i/a/o
【编辑模式】(左下角显示INSERT)
↓ 按Esc
回到【命令模式】
↓ 按:
【末行模式】(左下角显示:)
↓ 按Esc
回到【命令模式】
↓ 输入:wq
保存并退出
2. 模式详解与常用操作
(1)命令模式(打开文件默认进入)
作用:移动光标、复制、粘贴、剪切、撤销
| |
|---|
| 移动光标 | |
| |
0 | |
$ | |
gg | |
G | |
10j | |
Ctrl+f | |
Ctrl+b | |
| 复制粘贴剪切 | |
yy | |
10yy | |
dd | |
10dd | |
p | |
| 撤销与重做 | |
u | |
Ctrl+r | |
(2)编辑模式
作用:正常输入和修改文本
(3)末行模式
作用:保存、退出、查找、替换、设置
| |
|---|
| 保存与退出 | |
:w | |
:wq | |
:q | |
:q! | |
| 显示设置 | |
:set nu | |
:set nonu | |
:set list | |
| 查找与替换 | |
/关键词 | |
n | |
N | |
:%s/旧字符串/新字符串/g | |
3. 常见问题与解决
问题:打开文件时出现swap文件报错
E325: ATTENTION
Found a swap file by the name ".readme.txt.swp"
原因:上次编辑文件时异常退出(比如强制关闭终端),vim生成了临时swap文件
解决方法:
- 如果需要恢复修改,输入
R恢复,然后删除swap文件
4. vim中文教程
在终端输入以下命令,即可打开vim的中文交互式教程,跟着练30分钟就能掌握基本操作:
vimtutor zh_CN
四、课堂练习 逐题详细解答
练习1:文本查看
- 用
cat命令新建一个文本文件catFile,输入一些字符后,打印到屏幕进行查看
cat > catFile
这是第一行
这是第二行
^C # 按Ctrl+C结束输入
cat catFile
- 用
head/tail命令查看example.fq的前/后12行
head -n 12 Data/example.fq
tail -n 12 Data/example.fq
less -SN Data/example.gtf
# 按q退出
- 查看
reads.1.fq.gz的第11到12行(你的作业题)
zcat reads.1.fq.gz | head -n 12 | tail -n 2
练习2:文本处理
- 用
less查看example.gtf,然后管道符传递给wc统计行数
less Data/example.gtf | wc -l
less -S Data/example.gtf | cut -f 9
less -S Data/example.gtf | cut -f 9 | cut -d ';' -f 1
less -S Data/example.gtf | cut -f 9 | cut -d ';' -f 1 | sort | uniq -c
less -S Data/example.gtf | cut -f 9 | cut -d ';' -f 1 | sort | uniq -c | tr -s ' ' | tr ' ''\t'
练习3:vim编辑器
- 用
vim打开readme.txt文件,在第一行Biotrainee()的括号内填入自己的用户名
vim readme.txt
# 按i进入编辑模式,移动光标到括号内,输入你的用户名
# 按Esc回到命令模式,移动光标到第二行,按dd
# 按G跳到文件结尾,按p粘贴
# 按:进入末行模式,输入set nu,回车
# 按:进入末行模式,输入q!,回车
五、生信人专属实战技巧
- 永远不要解压.gz格式的测序数据:用
zcat/zless直接操作,节省90%的磁盘空间 - 永远用less看大文件:不要用cat,cat会把整个文件输出到屏幕,导致终端卡死
- sort和uniq永远一起用:uniq只能去除连续的重复行,不先sort结果完全错误
- fastq文件行数统计:
zcat xxx.fq.gz | wc -l,结果除以4就是reads的数量 - 管道符可以无限组合:复杂的文本处理就是把简单命令用管道符串起来
六、新手必踩的10个坑
- ❌ vim编辑完不知道怎么退出,强制关闭终端导致生成swap文件
- ❌ 文件名写错,特别是大小写和后缀(Linux大小写敏感)
- ❌ 重定向
>覆盖了重要文件(用>>追加,不会覆盖) - ❌ 输入密码时以为键盘坏了(Linux输入密码不显示任何内容)
七、核心命令速查表
| | |
|---|
cat | cat file | |
zcat | zcat file.gz | |
head | head -n 20 file | |
tail | tail -n 20 file | |
less | less -SN file | |
zless | zless -SN file.gz | |
wc | wc -l file | |
cut | cut -f 1,3 file | |
sort | sort -n -k 4 file | |
uniq | | |
tr | tr 'a' 'A' file | |
vim | vim file | |