Linux文本处理

背景:在分析生物信息数据时,往往会产生很多文本文件,如gene ID。Linux自带了处理文本数据大的程序包。本文主要介绍设计文本编辑、筛选、排序等功能的程序包。

1 grep

grep (global regular expression) 命令用于查找文件里符合条件的字符串或正则表达式。稍后介绍正则表达式的概念。

grep -[options参数] pattern /file >output_file
or
标准输出|grep -[options参数] pattern > output_file

-[options]
-n line-number显示筛选出的行在源文件中的行号(在第几行),有时候会有用
-c count统计筛选出的行一共有点多少行,并将数量输出
-i ignore-case忽略大小写。与R不同,在Linux中是区分大小写的
-v invert-match反向查找。筛除掉不需要的行。
-w–word-regerp match only whole words 严格匹配某个词。词在Linux指由一连串字母、数字、下划线组成的字符串,没有分割符。
-l --files-with-matches该参数能够告知用户源文件中哪些文件包含有pattern,并输出文件路径。
-L --files-without-matches。显示没有匹配上的文件。
-o 只显示匹配到的字符,如匹配”a“,只会在屏幕输出字符a。
-R 递归查询,只需指定一个目录,程序会自动检索该目录下的所有文件。
-A n 显示匹配到的数据后n行
-B n 显示匹配到的数据前n行
-C n 显示匹配到的数据前后各n行。以上n都需要指定。
pattern 指要查找的字符串或正则表达式。
/file 源文件,注意可以添加多个文件。
使用正则表达式
这里简要介绍一下cut命令,它的作用是从文件中的每一行中截取出一些部分,并输出到标准输出中。可以使用 cut 命令从一行字符串中于以字节,字符,字段(分隔符)等单位截取一部分内容出来。

2 awk

awk与grep类似,也是逐行扫描文件,awk允许用户输入命令块对匹配到的行进行操作。

awk [options] '脚本命令' inputfile#与grep的区别是通过''输入了脚本命令

options:
-F 指定分割符,分隔符直接放在F后面,默认是分隔符是空格与制表符。
-f 指定一个awk脚本文件作为脚本命令输入
脚本命令:
awk的强大之处在将筛选条件与命令结合在一起,脚本命令的基本结构是'筛选规则{命令}',如果没有指定要执行的命令,awk会将筛选到的行直接输出,起到grep的作用。
执行多个命令awk允许输入多条命令对筛选到的数据进行处理,这样就可以对不同筛选规则过滤出的数据进行同样的处理,输入多条命令只需要在命令模块中的不同命令间添加;

2.1 根据分隔符筛选某些字段

类似Excel函数筛选列,但是有些文件的分隔符是空格和制表符,用excel就处理不了。
理解字段与分割符,对于一行由字符、空格组成的文本行,需要先指定分割符,指定分割符后,这一行字符便被分割符分为若干字段,这样便可以使用$1/$2/$3 etc提取相应的字段。常见的分隔符有制表符、空格,此外也可以利用参数指定分隔符如 / ,不同的程序包指定分隔符的参数可能不同。

awk -F '{print$1,$3,$5}' inputfile#-F不加任何参数就是默认空格与制表符为分隔符

注意print命令,Print$1,$3,$5的含义是打印第1,3,5个字段,同时用分隔符将他们分开,这里输出时默认的分隔符依然是空格与制表符,Print$1$3$5指的是打印第1,3,5个字段,但是这几个字段是相连的,一般可能还需要指定分隔符将他们分开,如指定逗号,输出一个csv文件。在print前加上BEGIN{OFS=”,“}就能指定输出时使用逗号为分割符了。
BEGIN和END命令,在awk脚本命令前使用BEGIN{command}或在脚本命令后使用END{command}会在脚本命令执行前或执行后去执行大括号内指定的命令,这些命令可以是grep筛选命令。

参考网站:https://zhuanlan.zhihu.com/p/419494231

3 less

less可以搜索文本文件中的某个内容,按ENTER进入命令行模式,输入/检索内容,按ENTER向下检索,向下检索不到就按n向上检索,向上检索不到就按N向下检索。按HOME回到文件开头,按END键回到文件末尾。

4 cut选取列

cut取出指定列有两种方法:
cut命令可以按照指定的字节、字符、字段范围来取取出文件相应的列。
基本用法:

cut -<option> file

它的选项主要有两个方面
指定范围
n-:从第n列到文件结尾
-m:从第一列到第m列
n-m:从第n列到第m列
指定分割符等匹配规则

选项描述
-c以字符为单位进行分割
-d指定分隔符,默认是tab,在d后跟双引号或单引号,可在引号内部指定分隔符
-f选定指定范围内的字段输出,2-5表示第二至第5;2,5表示第2与第5
–output-delimiter=指定输出的列之间的分割符,默认是tab
–complement排除文件中匹配到的列并输出,比如排除某个字段

5 sed

基本语法:sed -<options> '指令' file

选项描述
-n只输出匹配到的行
-r使用拓展正则
-i直接修改原文件

5.1 sed查找文本

5.2 sed替换文本

sed -i “s/oldstring/goalstring/g” file
#这里的/可以替换为其他字符,如?、#,这样当替换的字符中含有/时,就可以避免歧义,也可以使用转义符\避免歧义。

sed中的编辑命令:
a:追加 向匹配行后面插入内容
c:更改 更改匹配行的内容
i:插入 向匹配行前插入内容
d:删除 删除匹配的内容
s:替换 替换掉匹配的内容
p:打印 打印出匹配的内容,通常与-n选项和用
=:用来打印被匹配的行的行号
n:读取下一行,遇到n时会自动跳入下一行
r,w:读和写编辑命令,r用于将内容读入文件,w用于将匹配内容写入到文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值