前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux下文本的简单处理(awk和sed)

Linux下文本的简单处理(awk和sed)

作者头像
生信与临床
发布2020-08-06 14:49:19
8420
发布2020-08-06 14:49:19
举报

最近,米老鼠经常需要处理大型文本(500M以上),用R和Python感觉有点太慢,所以就直接使用Linux指令处理了。

举个简单的例子,我手上的原文件(700M以上)是这样的格式:

现在我需要将它转换成如下格式:

两个文件的SNP和N是对应的,但是原文件的A1对应新文件的A2,原A2对应新A1,同时原AF1对应新文件的1-freq,BETA和b对应,SE和se对应,P和p对应。

这里我们需要将列名A1与A2互换,同时用1-AF去计算效应等位基因频率(EAF),然后将相关列提取出来并修改一下列名就可以了,这个在R中非常容易实现,但在Linux下其实只需要如下一行代码:

代码语言:javascript
复制
 cat mytest.assoc.fastGWA |awk -F "\t" '{print $2,$5,$4,1-$7,$8,$9,$10,$6}'|sed '1d'|sed '1i SNP\tA1\tA2\tfreq\tb\tse\tp\tn'>mytest.ma

该代码主要有4步:

第一步是先用cat指令,将文件输出到显示器上;

第二部使用awk指令选择特定的列(用列数作为索引),-F参数指定文件的分隔符的,这里1-$7其实就是为了计算EAF;

第三步是使用sed指令去掉原文件题头;

第四步也是使用sed指令添加新的题头,各个列名之间使用Tab分隔。

总运行时间在1分钟左右!

一行如此简单的Linux指令就完美地解决了问题!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信与临床 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档