Linux系列8 | 管道和重定向

在Linux系统里,有着两个神奇的概念,学了这两个概念,你才是真正的开始领会Linux的精妙之处,体会到Linux的精髓部分。

老规矩,第一步还是先给出上节课的习题答案

# 在家里建立test文件夹
cd ~
mkdir test
# 在test文件夹建立文本文件 t1 t2 t3 并且复制/etc/fstab过来
cd test
touch t1 t2 t3
cp /etc/fstab .
# 压缩t1 t2 t3为bz2
bzip2 t1 t2 t3
# 压缩fstab为gz并且保留原始文件
gzip -c fstab > f.gz
# 打包test目录为一个.tar.gz
tar cvfz test.tar.gz test
# 删除原始目录
rm -rf test
# 解压test文件夹
tar xvfz test.tar.gz
# 解压fstab
gunzip f.gz
# 解压包含t1t2t3的bz2文件
bunzip2 t*

过去的课程里,我们已经基本上掌握了Linux的黑框框里的基本操作了,可以像windows一样查看目录和文件,创建修改目录和文件甚至更加优雅的查看文件内容;我们还学会了复制,移动和删除文件(目录);后面还学习到了更复杂的下载命令和解压命令。

但是我们这些好像在Windows下都可以做到,在Linux下难道就没有什么比较强大的和Windows不同的命令操作吗?那当然了,今天就来讲讲Linux最最神奇的两个概念,管道和重定向。

改变标准输入 - <

由于大家都非常缺乏计算机系统的理论知识,所以管道这里就不讲解其具体实现的思想,我们把重点放在管道的概念以及其使用。相信这也是大多数看这套教程的人的目的,毕竟大家不是linux开发者,大部分都是用来处理数据而已。

说起管道,首先得谈一谈过去隐约提到的这两个东西,标准输入和标准输出。我们linux系统的很多程序,都是有着一个共同的原则,从标准输入中读取,然后经过处理后,进行标准输出

什么意思呢,给一个最经典的命令,cat,大家尝试这样 在终端中直接输入cat,我们会发现shell好像死了一样,什么也不做,但是你输入了随便一句话,然后回车,cat就会重复你这句话,然后直到你ctrl+D终止了它,就又退回到了命令行。

$ cat
I like apple
I like apple
I want to get a ball
I want to get a ball
Hello
Hello
cat ?
cat ?
# ctrl + D

通过这个例子,我们能了解到,标准输入一般来说就是你的键盘输入,标准输出就是你的控制台给你输出的内容

我们再来看一个例子,在linux中,我们常常使用wc -l来统计一个文件的行数。那么,我们现在来做类似上面的操作

$ wc -l
2
5
666
I like pea
???
answer me,wc?
# 我们发现wc -l没有任何反应 是wc程序出问题了吗?
# ctrl + D
6
# 获得标准输出

我们终止了标准输入以后,wc -l开始给我们统计行数,然后统计结束,标准输出。

通过上面的案例,相信大家已经非常了解什么叫标准输入和标准输出了吧!下面开始正式的讲解我们的新概念,输入重定向。

重定向,我对于这个词的理解是重新指定方向,这里的方向不是我们说的东西南北,是指给linux指定一个输出或者输出的方向来源。

这样,输入重定向的概念就来了,给定linux命令一个输入来源来取代标准输入,对输入来源进行处理,然后输出到标准输出,输入重定向的符号是我们的小于号 < ,下面给出一个案例。

假设我这里有抽取了不知道多少行的人类基因组的注释文件

图片
# 上述文件名为 test
# 下面把test文件重定向给cat
cat < test

我们看到的输出结果和cat test好像没有什么区别,那是因为cat本来就是读取标准输入然后输出,这个把标准输入变成了test文件而已,下面看一个wc的案例,大家就能看到问题所在了。

# wc -l test
# wc -l < test
图片

看到不同点了吗?再想想上面的只进行了wc -l期待标准输入的操作,再看看这里的第二个使用了标准输入重定向的操作,相信你一定已经理解了什么叫标准输入重定向。

改变标准输出 - >

如果上文的标准输入重定向你已经透彻的理解了,那么标准输出重定向你应该马上就知道它的概念了。

输出重定向的概念也来了,给定linux命令一个输出文件名,它就会自动的把标准输出重定向到你指定的文件里,这就是输出重定向。输出重定向的符号是>号。

我们平时对输入重定向的使用并不是很多,因为大部分操作都是通过管道进行的,不需要你去调整输入。但是对于输出重定向的使用非常多,比如你获得了一个样本文件,想拿出前十行看看,然后你就得保存,你总不能head -n 10以后自己复制然后粘贴到vim里吧。还有很多程序的运行结果,我们都需要把中间的输出放进一个log文件中,方便我们后续进行查看。

话不多说,大家用到的时候自然就会想到进行重定向了,下面给个案例

# 从基因组注释文件抽出每条染色体的长度
grep sequence-reg gencode.v38.annotation.gff3
# 但是我们想把结果保存在文件 chr.len中
grep sequence-reg gencode.v38.annotation.gff3 > chr.len
cat chr.len
图片

一目了然,这就是输出重定向的操作方法和使用。大家是不是已经懂了呢?

管道 - |

其实我们的重定向操作不仅仅只有 < 和 >,但是由于篇幅有限,后面的高级教程中会再次讲解余下的重定向操作,不过目前的这两个已经够你一大部分操作使用了。

下面在文章的最后,我们来讲解一下管道操作。这个管道简直形象的不能再形象了,大家可以想象有一根长长管子,从一端放进了原材料(标准输入或者输入),然后被处理,然后沿着管子继续流,又遇到了一个工作区进行处理,然后又在管子里流,。。。,直到流到了管子的另一端,流了出来(标准输出),或者流进了一个容器里(输出重定向)。这就是管道,我这么通俗的解释,大家应该已经懂了90%,下面给大家整个案例。

# 还是刚刚的文件处理操作
# 我们现在变成从原始注释文件中
# 抽取染色体长度行 
# 提取长度和染色体名字
# 保存到文件chr1.len中
grep sequence-reg gencode.v38.annotation.gff3 | cut -d ' ' -f 2,4 > chr1.len
cat chr1.len
图片

这就是管道,是不是非常的丝滑,非常的流畅,我再给大家做个简单案例。

# 注释文件中的前一百行出现了多少次gene、
head -n 100 gencode.v38.annotation.gff3 | grep '\sgene\s' | wc -l
图片

超级有用的思想,大家后面自己进行linux操作和数据处理的时候,一定要想到使用管道啊!真的是必备技能,必须懂,这两个概念是linux的应用中,非常非常非常重要的东西,还需要在使用中多多的体会才能更好的理解。

此外,其实很多流程工具或者流程语言也是这种思想,nextflow 和 snakemake以及其他的较为小众的流程语言都是这个思想。所以大家还是,一定要懂得这两个概念,并且要有自己的理解。

今天的分享就到这里了,下一次的分享将为大家详细讲解关于通配符在日常操作中的使用,以及使用ln建立软连接的操作*。

如果你喜欢我的文章,请收藏我的文章并且给我个赞,你的支持就是我更新的最大的动力,关注我会有更多惊喜哦,专注于生物信息学以及数据分析入门和进阶教程,也许我给不了你从10-100,但是我可以给你最好的从0-10!

最后,关注我的公众号,领取更多学习资料吧!!!

打开v搜索,”轻松玩转生信“或者从下面文章进去获取二维码关注哦

二维码传送门

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,392评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,258评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,417评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,992评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,930评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,199评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,652评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,327评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,463评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,382评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,432评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,118评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,704评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,787评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,999评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,476评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,057评论 2 341

推荐阅读更多精彩内容