首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何打印每个ID的最后一行?

如何打印每个ID的最后一行?
EN

Stack Overflow用户
提问于 2017-09-07 14:37:22
回答 5查看 108关注 0票数 0

我有一个ID (外显子)列表,每个ID都有多个后缀,我想得到每个ID的最后一行。

输入:

代码语言:javascript
复制
NM_203_exon_19
NM_203_exon_20
NM_0217_exon_7
NM_0217_exon_8
NM_0217_exon_9
NM_91_exon_14
NM_91_exon_15
NM_91_exon_16
NM_91_exon_17

期望产出:

代码语言:javascript
复制
NM_203_exon_20
NM_0217_exon_9
NM_91_exon_17
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-09-07 14:40:30

代码语言:javascript
复制
tac INPUTFILE |awk -F'_' '!a[$1FS$2]++' |tac
NM_203_exon_20
NM_0217_exon_9
NM_91_exon_17
票数 1
EN

Stack Overflow用户

发布于 2017-09-07 14:50:51

当您扫描每一行时,您可以检查前面的"ID“,然后如果新的"ID”不同,则打印它:

代码语言:javascript
复制
$ awk -F'_exon_' '{if($1 != id && last)print last; id=$1; last=$0} END{print last}' file
NM_203_exon_20
NM_0217_exon_9
NM_91_exon_17
票数 1
EN

Stack Overflow用户

发布于 2017-09-07 15:05:31

当您的列表被排序时,有一个想法可以将所有内容放在数组中并在其中迭代(不使用awk),当您更改字符串时意味着前一个字符串是最大的字符串,并且您将打印它,它将不会得到最后一个字符串,因此您将打印数组的最后一个项。

代码语言:javascript
复制
!/usr/bin/bash
fileString=$(cat  filename |tr "\n" " ")
array=($fileString)
for ((i=0; i < ${#array[@]}-1; i++))
do
  if [${array[$i]} != ${array[$i+1]}]; THEN 
    echo ${array[$i]}
  fi
done
   echo ${array[${#array[@]}-1]}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46099124

复制
相关文章

相似问题

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