[英]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.