linux学习笔记2-文本操作(1)

Linux中的文本处理命令十分多,内容纷繁,初学者可以对照以前学过的Word,Excel、PPT等处理文本的插入、替换、删除和查找等操作,只不过那个是已经熟悉的操作,Linux操作也是可以达到那种熟练程度的,并且在处理大文本数据方面有着更多的优势。另外,不管是写文章、做科研还是实验操作、软件操作等,都是有自己的规律在里面,而这些都有共性的地方-即逻辑,我们所要做的是掌握这些共性逻辑!
-个人愚见,不喜可以指导哈!

1. 查看文件命令

cat 命令将文件由前向后全部打印在屏幕上。
tac 命令将文件由后向前全部打印在屏幕上。
head 命令查看文件头部, -n 选项可以指定查看前几行。
tail 命令查看文件尾部, -n 选项可以指定查看后几行。
more 命令将以一页一页的形式展示内容,按空白键(space)向后一页。
less 命令用来查阅文档,功能更为强大,less 可以将文件整齐显示
q ## 退出
g ## 第一行
G ## 最后一行
j ## 下一行
k ## 上一行
/ ## 检索
n ## 匹配到的前一个
N ## 匹配到的后一个

less -SN 123.txt

用来将多个文件的内容合并,与 cut 命令完成的功能刚好相反。
首先确保两个文件行数相同。 paste 连接文件时,除非指定 -d 选项,否则默认用 空格 或 tab键 分隔文本。

$ echo a b c>1
$ cat 1
a b c
$ touch 2
$ echo d c e>2
$ cat 2
d c e
$ paste 1 2
a b c   d c e

2. grep 搜索文本 文件名

Linux 系统中 grep 命令是一种强大的文本搜索工具,grep 处理速度非常之快,尽量使用这个命令处理文本。
grep允许对文本文件进行模式查找,所谓模式查找,又被称为正则表达式。

-v ## 排除匹配到的, 即显示不包含匹配文本的所有行(相当于求反)
-w ## 单词的完全匹配
-B ## 指定输出匹配到的前多少行
-A ## 指定输出匹配到的后多少行
-E ## 指定支持扩展表达式
-C ## 对匹配到的行计数
-o ## 只输出匹配到的部分
-n ## 显示匹配行及行号
-i ## 忽略大小写
^a ## 行首,搜寻以 a 开头的行
ke$ ## 行尾,搜寻以 ke 结束的行

下面下载Homo_sapiens.GRCh37.75.gtf数据进行演示。

$ wget ftp://ftp.ensembl.org/pub/release-75/gtf/homo_sapiens/Homo_sapiens.GRCh37.75.gtf.gz
--2019-01-12 10:28:24--  ftp://ftp.ensembl.org/pub/release-75/gtf/homo_sapiens/Homo_sapiens.GRCh37.75.gtf.gz
           => ‘Homo_sapiens.GRCh37.75.gtf.gz’
Resolving ftp.ensembl.org (ftp.ensembl.org)... 193.62.193.8
Connecting to ftp.ensembl.org (ftp.ensembl.org)|193.62.193.8|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD (1) /pub/release-75/gtf/homo_sapiens ... done.
==> SIZE Homo_sapiens.GRCh37.75.gtf.gz ... 39344043
==> PASV ... done.    ==> RETR Homo_sapiens.GRCh37.75.gtf.gz ... done.
Length: 39344043 (38M) (unauthoritative)

Homo_sapiens.GRCh37.75.gtf.gz             100%[==================================================================================>]  37.52M  2.45MB/s    in 17s     

2019-01-12 10:28:44 (2.24 MB/s) - ‘Homo_sapiens.GRCh37.75.gtf.gz’ saved [39344043]

$ gunzip Homo_sapiens.GRCh37.75.gtf.gz
$ ls
Homo_sapiens.GRCh37.75.gtf

$ grep -E -o 'gene_id "\w+"' Homo_sapiens.GRCh37.75.gtf | head -n 5
gene_id "ENSG00000223972"
gene_id "ENSG00000223972"
gene_id "ENSG00000223972"
gene_id "ENSG00000223972"
gene_id "ENSG00000223972"

发现冗余项非常多,如果我们只要唯一值,怎么办呢?解决这个问题需要以下的cut、sed、sort等命令了。
先给出解决方案:

$ grep -E -o 'gene_id "(\w+)"' Homo_sapiens.GRCh37.75.gtf | cut -f2 -d" "| sed 's/"//g'| sort | uniq | head -n 5 #这一步比较慢,耗内存
ENSG00000000003
ENSG00000000005
ENSG00000000419
ENSG00000000457
ENSG00000000460

3.cut命令

cut命令用来显示行中的指定部分,删除文件中指定字段。cut经常用来显示文件的内容,类似于下的type命令。

说明:该命令有两项功能,其一是用来显示文件的内容,它依次读取由参数file所指 明的文件,将它们的内容输出到标准输出上;其二是连接两个或多个文件,如cut fl f2 > f3将把文件fl和 f2 的内容合并起来,然后通过输出重定向符“>”的作用,将它们放入文件f3中。

当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容。因此,一般用more等命令分屏显示。为了控制滚屏,可以按Ctrl+S键,停止滚屏;按Ctrl+Q键可以恢复滚屏。按Ctrl+C(中断)键可以终止该命令的执行,并且返回Shell提示符状态。

cut 可以以列为单位处理数据
cut(选项)(参数)
cut 默认以 \t 为分隔符, -d 选项可以指定分隔符,比如指定 , 为分隔符。

-b:仅显示行中指定直接范围的内容;
-c:仅显示行中指定范围的字符;

-d:指定字段的分隔符,默认的字段分隔符为“TAB”, “,” 等;
-f:显示指定字段的内容;指定列,可以是一个范围(比如2-8),注意不能用它给列排序。
-n:与“-b”选项连用,不分割多字节字符;
--complement:补足被选择的字节、字符或字段;
--out-delimiter=<字段分隔符>:指定输出内容是的字段分割符;
--help:显示指令的帮助信息;
--version:显示指令的版本信息。
--complement 选项提取指定字段之外的列(打印除了第二列之外的列):

$ grep -v "^#" Homo_sapiens.GRCh37.75.gtf | head -n 10 | cut -f 3-5
gene    11869   14412
transcript  11869   14409
exon    11869   12227
exon    12613   12721
exon    13221   14409
transcript  11872   14412
exon    11872   12227
exon    12613   12721
exon    13225   14412
transcript  11874   14409
## 略过Homo_sapiens.GRCh37.75.gtf文件中以'#'开头的行,然后取出文件的前十行,再取出第3,4,5列

使用 column 命令可以格式化输出:

$ grep -v "^#" Homo_sapiens.GRCh37.75.gtf | head -n 10 | cut -f 3-5 | column -t
gene        11869  14412
transcript  11869  14409
exon        11869  12227
exon        12613  12721
exon        13221  14409
transcript  11872  14412
exon        11872  12227
exon        12613  12721
exon        13225  14412
transcript  11874  14409
## 注意,使用column命令是为了显示效果,不要将它的处理结果传入文本(会导致程序处理文件效率降低)。

小技巧

ctrl + shift + = 放大终端窗口的字体显示
ctrl + - 缩小终端窗口的字体显示

参考文件:

【1】Jimmy老师Linux基础知识(链接在下面)
【2】linux命令行文本操作一文就够
https://mp.weixin.qq.com/s__biz=MzAxMDkxODM1Ng%3D%3D&idx=1&mid=2247485539&sn=cbb02d48ea5bb90ee5bdf35d501ee428
【3】 生物信息学常见的数据下载,包括基因组,gtf,bed,注释 http://www.biotrainee.com/thread-857-1-1.html
【4】 (13)Hg19基因组的一些分析-生信菜鸟团博客2周年精选文章集 https://cloud.tencent.com/developer/article/1054518
【5】 Linux命令大全

生信技能树公益视频合辑:学习顺序是linux,r,软件安装,geo,小技巧,ngs组学!
B站链接:https://m.bilibili.com/space/338686099
YouTube链接:https://m.youtube.com/channel/UC67sImqK7V8tSWHMG8azIVA/playlists
生信工程师入门最佳指南:https://mp.weixin.qq.com/s/vaX4ttaLIa19MefD86WfUA
学徒培养:https://mp.weixin.qq.com/s/3jw3_PgZXYd7FomxEMxFmw
生信技能树 - 简书 https://www.jianshu.com/u/d645f768d2d5

猜你喜欢

转载自blog.csdn.net/weixin_33834075/article/details/86990713
今日推荐