首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从混乱的文件中提取名称

从混乱的文件中提取名称
EN

Stack Overflow用户
提问于 2014-09-05 14:37:48
回答 5查看 107关注 0票数 0

我有一个像这样的文本文件:

代码语言:javascript
运行
复制
MODIFIER|||c.72+1731G>T|SAMD11|protein_coding|CODING|NM_152486.2|2)
MODIFIER|||c.73-597G>A|SAMD11|protein_coding|CODING|NM_152486.2|2)
MODIFIER|||c.306-249T>C|SAMD11|protein_coding|CODING|NM_152486.2|4)
MODIFIER||2842||SAMD11|protein_coding|CODING|NM_152486.2|)
MODIFIER||4854||SAMD11|protein_coding|CODING|NM_152486.2|)
MODIFIER|||c.1443+808T>C|NOC2L|protein_coding|CODING|NM_015658.3|12)
LOW|||c.889C>G|NOC2L|protein_coding|CODING|NM_015658.3|8)
LOW|||c.889T>G|NOC2L|protein_coding|CODING|NM_015658.3|8)
MODIFIER||2687||KLHL17|protein_coding|CODING|NM_198317.2|)
MODIFIER||2885||NOC2L|protein_coding|CODING|NM_015658.3|)

我想提取像SAMD11、NOC2L和KLHL17这样的名字。

如果这些文件以正确的模式出现,我将使用tr将文件拆分为

tr '|' '\t'及其之后将提取包含此名称信息的列。

帮帮忙吧。

谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-09-05 14:40:06

你可以用awk,

代码语言:javascript
运行
复制
$ awk -F\| '{print $5}' file
SAMD11
SAMD11
SAMD11
SAMD11
NOC2L
NOC2L
NOC2L
KLHL17
NOC2L

如果要删除副本,然后将awk输出传递给sort -u

代码语言:javascript
运行
复制
$ awk -F\| '{print $5}' file | sort -u
KLHL17
NOC2L
SAMD11

正如@jaypal所建议的,您可以使用下面的awk单行命令来删除副本。

代码语言:javascript
运行
复制
awk -F\| '!seen[$5]++ && $0=$5' file
票数 5
EN

Stack Overflow用户

发布于 2014-09-05 14:44:38

使用标准裁剪命令提取字段

使用管道符号作为字段分隔符,并使用标准的剪切命令提取第五个字段。例如:

代码语言:javascript
运行
复制
$ cut -d\| -f5 /tmp/corpus
SAMD11
SAMD11
SAMD11
SAMD11
SAMD11
NOC2L
NOC2L
NOC2L
KLHL17
NOC2L
票数 6
EN

Stack Overflow用户

发布于 2014-09-05 14:52:43

Avinash Raj's awk solution一样,这可以用Perl实现,方法完全相同。您还可以包括相同的脱扣过程:

代码语言:javascript
运行
复制
perl -F'\|' -lane'print $F[4] if !$seen{$F[4]}++;' yourfile.txt
  • !$seen{$F[4]}++语句对%seen哈希中的任何新键返回true。
  • -a开关是autosplit,-F为其设置分隔符(以正则表达式的形式)。
  • -l处理print的换行符,以及
  • -n将程序代码放入一个while (<>)循环中,该循环将读取文件或标准输入。
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25688369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档