主要来源:兄弟连Linux视频教学、Linux操作与生物信息——基因学苑
2021.2.18
1. 对文件的统计
wc
2. 处理行
2.1 grep:提取行
grep命令会将匹配内容所在的行输出到频幕上,支持正则表达式
- 正则表达式是包含匹配,即匹配搜索文件中字符所在的行/列;通配符是完全匹配,用来匹配文件名等
- find用来查找目录中是否存在某个文件,grep用来搜索文件中的内容
2.1.1 常用选项
-
-V
:反选,打印没有匹配到的行 -
-n
:显示行号 -
-c
:显示总共有多少行被匹配到了 -
-E
:开启扩展的正则表达式
2.1.2 实例
- 匹配空白行
grep -n "^$" <文件名>
- 查看文件中基因树目
grep -c ">" <文件名>
2.2 split:按行分割文件
2.2.1 常用选项
-
l
:指定切割后文件行数,默认是1000行 -
-a
:新生成文件名保留字符数,默认是2 -
--additional-suffix=SUFFIX
:追加新生成文件名后缀
2.2.2 实例
按200行切割文件,并指定
split -l 200 -a 2 <文件名> --additional-suffix=.fa
3. 处理列
3.1 cut
对具有统一分割符的列进行截取
3.1.1 常用选项
-
-f列号
:提取第几列 -
-d
:指定分割符,默认是\t
3.1.2 实例
提取第一至三列,分割符为:
的列
cut -d ":" -f 1,3 <文件名>
cut的域分隔符只能是单个字符,而awk是多个字符
3.2 awk
awk是一个强大的文本处理工具,相对于grep的查找,sed的编辑,awk能够把文件逐行读入,并默认以空格为分割符将每行切片,可以进行多种处理。
awk处理的文本也需要具有统一的格式
3.2.1格式和常用选项
1. 格式
判断条件1,然后执行动作1,依次类推
awk '条件1{动作1} 条件2{动作2}...' <文件名>
2. 常用条件
- 当条件为空时,指全部内容
- BEGIN:指在文件开始部位
- END:指在文件结束部位
3. 选项
-
-F
:指定分割符
4. 实例
4.1 输出文件blast_m8.out
所有的行
awk '{print $0}' blast_m8.out
4.2 输出文件blast_m8.out
的第1列和第3列
awk '{print $1,$3}' blast_m8.out
逗号
,
表示空格,可以用其他分隔符替代,比如制表符“\t”
4.3 输出文件blast_m8.out
最后一列
awk '{print $NF}' blast_m8.out
4.4 文件passwd.list
的分割符为:
,输出第一列和最后一列,并添加路径
awk -F ":" '{print “account:”$1 "\n" "path:"$NF}' passwd.list
可以添加内容,但是需要用到双引号
""
4.5 对blast_m8.out
文件进行条件筛选后输出符合条件的行
awk '{if ($>=80 && $4>=100) print $0}' blast_m8.out
4.6. 对blast_m8.out
文件进行筛选后,输出符合条件的第一列,并且排序,同时去重复,最后进行统计
awk '{if ($>=80 && $4>=100) print $1}' blast_m8.out | sort -n -k1 | uniq | wc
4. sort:对文件中的内容排序
4.1 作用
sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
4.2 常用选项
-
-t
:指定分割符,默认是\t
-
-k
:指定字符范围,后面接数字 -
-n
:以数值型进行排序 -
-r
:进行降序排列 -
-f
:忽略大小写 -
-u
:去除重复的内容
4.3 实列
- 文件分割符是
\t
,按第三列的数字进行降序排列
sort -n -k 3 -r <文件名> > <降序排列>
- 文件分割符是空格,按照第一列的首字母大小输出
sort -t ' ' -k 1 <文件名> > <升序排列>
- 文件分割符是空格,先是按照第二列的数字大小输出,若第二列数字相同则按照第三列数字大小输出
sort -n -t ' ' -k 2 -k 3 <文件名> > <双排序文件>
- 文件分割符是
\t
按数字后排序,输出不重复的行
sort -n -u <文件名>
5. uniq:用于报告文件或者忽略文件中的重复行,一般与sort命令结合使用
5.1 常用选项
-
-c
:显示该行重复出现的次数 -
-d
:显示重复出现的行 -
-u
::仅显示出一些行
5.2 实例
- 删除重复行
uniq <file.txt>
或者
sort <file.txt> | uniq
或者
sort -u <file.txt>
- 统计各行再文件中出现的次数
sort <file.txt> | uniq -c
- 在文件中找到重复的行
sort <file.txt> | uniq -d
6. sed:流编辑器
每次读入文件的一行,然后进行格式化的处理,之后输出到屏幕上,不改变原文件内容。
6.1 常用选项
-
-e
:允许应用多条sed命令编辑,用分号隔开 -
-i
:直接在原文上修改 -
-f
:接模式的脚本文件,例如依次需要替换多个目标时,可以将这些模式写入一个文件 -
-n
:输出经sed命令处理过的内容到屏幕上,原文件不变
6.2 实例
- 直接在原文替换内容,并生成一个原文件的备份文件
sed -i ".bak" 's/GI/gi/g' <seq.fna>
注意:g可以改为具体的数字,表示只替换最开始数字出现的次数
- 删除文件中的空白行
sed -e '/^\s+*$/d' <seq_with_space.fna>
- 打印文件的第3行到第5行
sed -n '3,5p' <seq.fna>
- 删除第2行到4行
sed '2,4d' <seq.fna>
- 只替换10行到200行内匹配到的内容
sed -e '10,200s/gi/GI/g' <seq.fna>
注:在10,200s后面加上
!
表示取反的行进行操作
- 将文件中的大写字母替换为相应的小写字母
sed -e '/>/!y/ATGC/atgc/' <seq.fna>
或者
tr [ATGC] [atgc] < <seq.fna>
- 只替换固定的行范围时,可以用相应行的具体字符,用
//
包含即可,两个行匹配之间用,
分开- y模式可以同时逐个替换
- 将文件名添加到相应文件的开头
#!/bin/bash
for file in *
do
sed -i "1>$file" $file
done
网友评论