我有一个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
答案 0 :(得分:1)
tac INPUTFILE |awk -F'_' '!a[$1FS$2]++' |tac
NM_203_exon_20
NM_0217_exon_9
NM_91_exon_17
答案 1 :(得分:1)
当您扫描每一行时,您可以检查存储以前的" 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
答案 2 :(得分:1)
当您的列表被订购时,一个想法可以将所有内容放入数组并通过它进行迭代(不使用awk),当您更改String意味着前一个是最大的并且您将打印它,它将不会得到最后一个一,所以你将在最后打印数组的最后一项。
<div>
<style scoped>
h1 {color:red;}
p {color:blue;}
</style>
<h1>Heading</h1>
<p>hello world! I'm of blue color!</p>
</div>
<p>I'm out of the scope, so I'm of the black color :(</p>
答案 3 :(得分: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
答案 4 :(得分:1)
使用$ tac file | sort -t_ -k2,2 -su
NM_0217_exon_9
NM_203_exon_20
NM_91_exon_17
的GNU排序(稳定排序):
import pandas as pd
data = pd.read_clipboard()
data.reset_index(inplace=True)
data['combined_date'] =pd.to_datetime(data.level_1+' '+data.date)
data['prev_dt'] = data.combined_date - pd.to_timedelta(2,'m')
new_data = data.merge(data,left_on='prev_dt', right_on='combined_date')[['combined_date_x', 'comm'bined_date_y', 'ask0_x', 'ask0_y']]
new_data['deriv'] = (new_data.ask0_x - new_data.ask0_y)/2