Category: shell

  • awk命令将fastq文件转换成fasta

    awk ‘{if(NR%4==1||NR%4==2){print $0}}’ test.fq | sed ‘s/^@/>/g’ > myfile.fasta 有时候,比如说我们需要做一个clustalw,我们需要将多行的fasta文件(multiple line fasta)格式文件,转换成单行的fasta文件(single line fasta)序列文件,怎么办呢。 巧用awk + printf一行搞定。 awk ‘/^>/ { print n $0;} !/^>/ {printf “%s”, $0, n=”\n”} END {print “”}’ test.fa  

  • sed,awk

    sed工具 sed本身也是一个管道命令,可以分析standard input的,而且sed还可以将数据进行替换、删除、新增、选取特定行等的功能。 用法:sed [-nefr] 动作 参数: -n:使用安静模式。在一般sed的用法中,所有来自stdin的数据一般都会被列出到屏幕上。但如果加上-n参数后,则只有经过sed特殊处理的那一行(或者操作)才会被列出。 -e:直接在命令行模式上进行sed的动作编辑。 -f:直接将sed的动作写在一个文件内,-f filename则可以执行filename内的sed动作。 -r:sed的动作支持的是扩展型正则表达式的语法(默认是基础正则表达式语法)。 -i:直接修改读取的文件内容,而不是屏幕输出。 动作说明:[n1[,n2]]function n1,n2:不见得会存在,一般代表选择进行动作的行数,举例来说,如果我的动作是需要在10到20行之间进行的,则‘10,20[动作行为]’ function有下面这些参数: a:新增,a的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行); c:替换,c的后面可以接字符串,这些字符串可以替换n1,n2之间的行; d:删除,因为是删除,所以d后面通常不接任何参数; i:插入,i的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行); p:打印,将某个选择的数据打印出来。通常p会与参数sed -n一起运行; s:替换,可以直接进行替换工作。通常这个s的动作可以搭配正则表达式。 例一:删除第2到5行 注意sed后面接的动作,务必以”两个单引号括住! 如果体型变换一下,删除第三到最后一行,则是‘nl /etc/passwd | sed ‘3,$d’’,这个$代表最后一行。 例二:将第2~5行的内容替换成为‘No 2-5 number’ sed 另一个强大的用法,部分数据的查找并替换:sed ‘s/要被替换的字符串/新的字符串/g’ awk:好用的数据处理工具 相比于sed常常作用于一整行的处理,awk则比较倾向于将一行分成数个‘字段’来处理。因此。awk适合小型的数据处理 用法:awk ‘条件类型 1{动作 1} 条件类型 2{动作 2} …’ filename awk的处理流程: 读入第一行,并将第一行的数据填入$0,$1,$2等变量当中; 依据条件类型的限制,判断是否需要进行后面的动作; 做完所有的动作与条件类型; 若还有后续的‘行’的数据,则重复上面1-3的步骤,直到所有的数据都读完为止。 变量名字及意义: NF:每一行($0)拥有的字段总数 NR:目前awk所处理的是‘第几行’数据…

  • 排序命令:sort,wc,uniq

    sort 用法:sort [-fbMnrtuk] [file or stdin] 参数: -f:忽略大小写 -b:忽略最前面的空格部分 -M:以月份名字来排序,如JAN,DEC等的排序方法 -n:使用‘纯数字’排序(默认是以文字类型来排序的) -r:反向排序 -u:就是uniq,相同的数据中,仅出现一行代表 -t:分隔符,默认是用tab键来分割 -k:以那个区间(field)来进行排序 wc 用法:wc [-lwm] 参数: -l:仅列出行 -w:仅列出多少字 -m:多少字符 uniq 用法:uniq [-ic] 参数: -i:忽略大小写 -c:进行计数 摘自:《鸟哥的私房菜》第三版 基础学习篇

  • 选取命令:cut,grep

    cut cut -d ‘分隔字符’ -f fields cut -c 字符范围

  • 通配符与特殊符号

    通配符是bash操作环境中一个非常有用的功能,利用它我们处理数据就更加方便。 *:代表0个到无穷多个任意字符 ?: 代表一定有一个任意字符 []: 同样代表一定有一个在中括号内的字符(非任意字符) [-]: 若有减号在中括号内时,代表『在编码顺序内的所有字符』。例如 [0-9] 代表 0 到 9 之间的所有数字,因为数字的语系编码是连续的 [^]: 若中括号内的第一个字符为指数符号 (^) ,那表示『反向选择』,例如 [^abc] 代表 一定有一个字符,只要是非 a, b, c 的其他字符就接受的意思 特殊字符 #: 注释,这个最常用在script中,视为说明.其后的数据均不执行 \: 转义符号,将特殊字符或通配符还原成一般字符 |: 分隔两个管线命令的界定 ;: 连续性命令的界定(注意,与管线命令并不相同) ~: 用户的主文件夹 $: 使用变量前导符 &: 将指令变成在背景下工作 !: 逻辑运算中的“非” /: 路径分隔符号 >,>>: 数据流重定向,输出导向,代表替换和累加 <,<<: 数据流重定向,输入导向 ”: 单引号,不具有变量置换的功能 “”: 具有变量置换的功能 “: 两个“`”中间为可以先执行的指令 (): 中间为子shell的起始与结束 {}:…

  • shell的变量功能(二)

    变量键盘读取,数组与声明:read,array,declare 1. read 读取来自键盘输入的变量,常被用在 shell script 的撰写当中。 用法: 2. declare / typeset declare 或 typeset 是一样的功能,就是在声明变量的类型。如果使用 declare 后面并没有接任何参数,那么 bash 就会主动的将所有的变量名称与内容通通叫出来, 就好像使用 set 一样。 用法:declare [-aixr] variable 参数: -a : 将后面名为 variable 的变量定义成为数组 (array) 类型 -i : 将后面名为 variable 的变量定义成为整数数字 (integer) 类型 -x : 用法与 export 一样, 就是将后面的 variable 变成环境变量; -r : 将变量设置成为 readonly 类型, 该变量不可被更改内容,…

  • shell的变量功能(一)

    什么是变量? 变量是一个存储位置和一个关联的符号名字,这个存储位置包含了一些已知或未知的量或者信息,即值。在C语言里,变量是如下三方面的统一体: 名字(运行时会变成数字化的名字,内存地址) 存储位置(某一位置开始的一定大小的存储空间) 该存储位置里内容的解释方式(即类型,整数、浮点数还是字符串?) 任意一部分单独都不是变量。当我们给一个变量a赋值另一个值时,改变的是a对应的存储位置里的内容,赋值前后是同一个a,因为1、2、3都没有变。 变量的显示 变量的设置规则 变量与变量内容以一个等号“=”来连接; 等号两边不能直接接空格符; shell中所有变量都定义为字符串,且变量名称只能是英文字母与数字,但是数字不能是开头字符; 若有空格符可以使用双引号  ”  或单引号  ‘  来将变量内容结合起来,但须要特别留意, 双引号内的特殊字符可以保有变量特性,但是单引号内的特殊字符则仅为一般字符; 必要时需要以转意字符   \   来将特殊符号 ( 如 Enter, $, \, 空格符, ‘ 等 ) 变成一般符号; 在一串指令中,还需要借由 其它的shell指令 提供的信息,可以使用   ` command`  (特别特别注意,那个 ` 是键盘上方的数字键 1 左边那个按键,而不是单引号!) 或则$(命令) 。 若该变量需要扩增变量内容时,则需以双引号及 $变量名称 如: “$PATH”:/home  继续累加内容; 若该变量需要在其它子程序执行,则需要以  export  来使变量变成环境变量,例如: #export  PATH…

  • vi与vim

    讲真,在这之前我并不知道vi与vim是有区别的,一直以为是因为偷懒将vim缩写成vi,然而并不是。     vim是从 vi 发展出来的一个文本编辑器 。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和Emacs 并列成为类Unix系统 用户最喜欢的编辑器。vim是vi的加强版,它不仅兼容 vi 的所有指令,而且还有一些新的特性在里面。新的特性主要体现在以下几个方面: 1、多级撤消 2、易用性 3、语法加亮 4、可视化操作 5、对vi的完全兼容,所以在某些情况下可以把vim当做vi来使用。当然,作为生信工作者使用最多的还是vim,不说其他,语法加亮这一特性就给我们的编程带来很多便利。要想完全掌握vim的操作指令很耗脑容量,也没必要,记住一些常用指令就行。 vim指令大全: vim的环境设置与记录(我的Vim之路)

  • 学习shell与shell script

    什么是shell?      shell是你(用户)和Linux(或者更准确的说,是你和Linux内核)之间的接口程序。你在提示符下输入的每个命令都由shell先解释然后传给Linux内核。      shell 是一个命令语言解释器(command-language interpreter)。拥有自己内建的 shell 命令集。此外,shell也能被系统中其他有效的Linux 实用程序和应用程序(utilities and application programs)所调用。     不论何时你键入一个命令,它都被Linux shell所解释。一些命令,比如打印当前工作目录命令(pwd),是包含在Linux bash内部的(就象DOS的内部命令)。其他命令,比如拷贝命令(cp)和移动命令(rm),是存在于文件系统中某个目录下的单独的程序。而对用户来说,你不知道(或者可能不关心)一个命令是建立在shell内部还是一个单独的程序。     shell 首先检查命令是否是内部命令,不是的话再检查是否是一个应用程序,这里的应用程序可以是Linux本身的实用程序,比如ls 和 rm,也可以是购买的商业程序,比如 xv,或者是公用软件(public domain software),就象 ghostview。然后shell试着在搜索路径($PATH)里寻找这些应用程序。搜索路径是一个能找到可执行程序的目录列表。如果你键入的命令不是一个内部命令并且在路径里没有找到这个可执行文件,将会显示一条错误信息。而如果命令被成功的找到的话,shell的内部命令或应用程序将被分解为系统调用并传给Linux内核。     shell的另一个重要特性是它自身就是一个解释型的程序设计语言,shell 程序设计语言支持在高级语言里所能见到的绝大多数程序控制结构,比如循环,函数,变量和数组。shell 编程语言很易学,并且一旦掌握后它将成为你的得力工具。任何在提示符下能键入的命令也能放到一个可执行的shell程序里,这意味着用shell语言能简单地重复执行某一任务。 为什么学习shell?     没有任何一种程序设计语言是完美的,甚至没有一个最好的语言。只有在特定环境下适合的语言。                                        …