我有一个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发布于 2017-09-07 14:40:30
tac INPUTFILE |awk -F'_' '!a[$1FS$2]++' |tac
NM_203_exon_20
NM_0217_exon_9
NM_91_exon_17发布于 2017-09-07 14:50:51
当您扫描每一行时,您可以检查前面的"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发布于 2017-09-07 15:05:31
当您的列表被排序时,有一个想法可以将所有内容放在数组中并在其中迭代(不使用awk),当您更改字符串时意味着前一个字符串是最大的字符串,并且您将打印它,它将不会得到最后一个字符串,因此您将打印数组的最后一个项。
!/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]}https://stackoverflow.com/questions/46099124
复制相似问题