簡體   English   中英

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

[英]How to print the last line of each ID?

我有一個ID(外顯子)列表,每個ID具有多個后綴,我想獲取每個ID的最后一行

輸入:

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

所需的輸出:

NM_203_exon_20
NM_0217_exon_9
NM_91_exon_17
tac INPUTFILE |awk -F'_' '!a[$1FS$2]++' |tac
NM_203_exon_20
NM_0217_exon_9
NM_91_exon_17

掃描每一行時,可以檢查是否存儲了先前的“ ID”,如果新的“ ID”不同,則可以打印出來:

$ 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

當您的列表被排序時,一個想法可以將所有內容放入數組並迭代通過(不使用awk),當您更改String時,意味着前一個是最大的,您將打印它,而不會得到最后一個,您將在最后打印數組的最后一項。

!/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]}

由於文件已經按照每個ID的后綴排序,因此請為每個ID打印最后一行

awk -F"_" 'NR==1{prev=$2}; $2==prev{a=$0} $2!=prev{print a; prev=$2} END{print $0}' file

輸出:

NM_203_exon_20
NM_0217_exon_9
NM_91_exon_17

使用GNU -s排序(穩定排序):

$ tac file | sort -t_ -k2,2 -su
NM_0217_exon_9
NM_203_exon_20
NM_91_exon_17

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM