使用shell脚本获取最新的行
我有一个格式与此类似的文件:使用shell脚本获取最新的行,shell,unix,awk,Shell,Unix,Awk,我有一个格式与此类似的文件: 10:26:50 AEYTCVAETK 2 genes ADUm.1024,ADUm.5198,ADUm.750 10:27:51 AIQLTGK 1 genes ADUm.1999,ADUm.3560 10:35:12 AIQLTGK 8 genes ADUm.1999,ADUm.3560 10:42:26 AEYTCVAETK 2 genes ADUm.1024,ADUm.5198,ADUm.750 1
10:26:50 AEYTCVAETK 2 genes ADUm.1024,ADUm.5198,ADUm.750
10:27:51 AIQLTGK 1 genes ADUm.1999,ADUm.3560
10:35:12 AIQLTGK 8 genes ADUm.1999,ADUm.3560
10:42:26 AEYTCVAETK 2 genes ADUm.1024,ADUm.5198,ADUm.750
10:50:43 KHEPPTEVDIEGR 5 genes ADUm.367
10:52:23 VSSILEDKTT 9 genes ADUm.1192,ADUm.2731
10:52:26 AIQLTGK 10 genes ADUm.1999,ADUm.3560
10:55:16 VSSILEDKILSR 3 genes ADUm.2146,ADUm.5750
10:55:58 VSSILEDKILSR 2 genes ADUm.2146,ADUm.5750
我想为第2列中名称的每个不同值打印最新一行,这意味着上述输入将变成:
10:42:26 AEYTCVAETK 2 genes ADUm.1024,ADUm.5198,ADUm.750
10:52:26 AIQLTGK 10 genes ADUm.1999,ADUm.3560
10:50:43 KHEPPTEVDIEGR 5 genes ADUm.367
10:52:23 VSSILEDKTT 9 genes ADUm.1192,ADUm.2731
10:55:58 VSSILEDKILSR 2 genes ADUm.2146,ADUm.5750
我该怎么做
如果文件已按时间排序,请使用awk表示感谢和问候
awk '{a[$2]=$0}END{for (i in a) print a[i]}' file|sort -n
10:42:26 AEYTCVAETK 2 genes ADUm.1024,ADUm.5198,ADUm.750
10:50:43 KHEPPTEVDIEGR 5 genes ADUm.367
10:52:23 VSSILEDKTT 9 genes ADUm.1192,ADUm.2731
10:52:26 AIQLTGK 10 genes ADUm.1999,ADUm.3560
10:55:58 VSSILEDKILSR 2 genes ADUm.2146,ADUm.5750
如果原始文件未排序,请运行以下操作:
awk '{s=$1;gsub(/:/,"",s);if (s>max[$2]){max[$2]=s;l[$2]=$0}}END{for (i in max) print l[i]}' file|sort -n
文件是否已按时间排序?谢谢,我正在这样做,但我没有打印[I],而是只打印了第二列的
I
,让我测试一下,我肯定会接受答案:)但为什么要使用sort-n?