首页 > 系统相关 >linux 中awk命令实现根据一列数值的大小筛选指定列多个类别的最大或者最小项

linux 中awk命令实现根据一列数值的大小筛选指定列多个类别的最大或者最小项

时间:2024-02-18 09:11:24浏览次数:32  
标签:XM rna awk 一列 linux gene ay1 ID ay2

 

001、

(base) [b20223040323@admin1 test2]$ cat 003.txt  ## 测试数据如下,第一列有多个项,且部分项有重复,实现根据第三列筛选出最大的项
ID=gene-TRNAC-GCA       rna-TRNAC-GCA   72
ID=gene-ATP5O   rna-XM_005674665.3      793
ID=gene-ITSN1   rna-XR_001917533.1      4437
ID=gene-ITSN1   rna-XM_018043229.1      9110
ID=gene-ITSN1   rna-XM_018041619.1      9323
ID=gene-ITSN1   rna-XM_018042670.1      9247
ID=gene-ITSN1   rna-XM_018042157.1      9141
ID=gene-ITSN1   rna-XM_018043907.1      5462
ID=gene-CRYZL1  rna-XM_005674667.3      1609
ID=gene-CRYZL1  rna-XM_013962888.2      1588
ID=gene-CRYZL1  rna-XM_005674668.3      1600
ID=gene-CRYZL1  rna-XM_013962952.2      1749
ID=gene-CRYZL1  rna-XM_005674666.3      1745
ID=gene-DONSON  rna-XM_018045976.1      2568
ID=gene-SON     rna-XR_001295570.2      8568
ID=gene-SON     rna-XM_005674676.3      8488
ID=gene-SON     rna-XM_005674677.3      8409
ID=gene-SON     rna-XM_005674679.3      7645
ID=gene-SON     rna-XM_005674680.3      8005
ID=gene-GART    rna-XM_005674671.3      4934

 

002、输出最大项的实现方法如下:

(base) [b20223040323@admin1 test2]$ awk '{if(ay1[$1] == "") {ay1[$1] = $3; ay2[$1] = $0};if(ay1[$1] < $3){ay1[$1] = $3; ay2[$1] = $0} } END{for(i in ay1) {print ay2[i]}}' 003.txt
ID=gene-GART    rna-XM_005674671.3      4934            ## 借助awk 数组来实现; 基本思想利用awk循环对第三列数值进行判断;出现最大值,则将当前行存储在ay2数组中
ID=gene-TRNAC-GCA       rna-TRNAC-GCA   72
ID=gene-SON     rna-XR_001295570.2      8568
ID=gene-DONSON  rna-XM_018045976.1      2568
ID=gene-CRYZL1  rna-XM_013962952.2      1749
ID=gene-ATP5O   rna-XM_005674665.3      793
ID=gene-ITSN1   rna-XM_018041619.1      9323

 

003、输出最小项的实现方法如下:

(base) [b20223040323@admin1 test2]$ awk '{if(ay1[$1] == "") {ay1[$1] = $3; ay2[$1] = $0}; if(ay1[$1] > $3){ay1[$1] = $3; ay2[$1] = $0}} END {for(i in ay1) {print ay2[i]}}' 003.txt
ID=gene-GART    rna-XM_005674671.3      4934        ## 实现的方法与输出最大项方法一致
ID=gene-TRNAC-GCA       rna-TRNAC-GCA   72
ID=gene-SON     rna-XM_005674679.3      7645
ID=gene-DONSON  rna-XM_018045976.1      2568
ID=gene-CRYZL1  rna-XM_013962888.2      1588
ID=gene-ATP5O   rna-XM_005674665.3      793
ID=gene-ITSN1   rna-XR_001917533.1      4437

 

004、如何保持第一列的顺序

a、输出最大项,并保持第一列的顺序

(base) [b20223040323@admin1 test2]$ awk '{if(ay1[$1] == "") {tmp++; ay1[$1] = $3; ay2[tmp] = $0};if(ay1[$1] < $3){ay1[$1] = $3; ay2[tmp] = $0} } END{for(i = 1; i <= length(ay2); i++) {print ay2[i]}}' 003.txt
ID=gene-TRNAC-GCA       rna-TRNAC-GCA   72           ## 利用tmp计数; 最后按照for数值循环输出
ID=gene-ATP5O   rna-XM_005674665.3      793
ID=gene-ITSN1   rna-XM_018041619.1      9323
ID=gene-CRYZL1  rna-XM_013962952.2      1749
ID=gene-DONSON  rna-XM_018045976.1      2568
ID=gene-SON     rna-XR_001295570.2      8568
ID=gene-GART    rna-XM_005674671.3      4934

 

b、输出最小项,并保持第一列的顺序

(base) [b20223040323@admin1 test2]$ awk '{if(ay1[$1] == "") {tmp++; ay1[$1] = $3; ay2[tmp] = $0}; if(ay1[$1] > $3){ay1[$1] = $3; ay2[tmp] = $0}} END {for(i = 1; i <= length(ay2); i++) {print ay2[i]}}' 003.txt
ID=gene-TRNAC-GCA       rna-TRNAC-GCA   72   ## 输出最小项,并保持第一列的顺序
ID=gene-ATP5O   rna-XM_005674665.3      793
ID=gene-ITSN1   rna-XR_001917533.1      4437
ID=gene-CRYZL1  rna-XM_013962888.2      1588
ID=gene-DONSON  rna-XM_018045976.1      2568
ID=gene-SON     rna-XM_005674679.3      7645
ID=gene-GART    rna-XM_005674671.3      4934

 。

 

标签:XM,rna,awk,一列,linux,gene,ay1,ID,ay2
From: https://www.cnblogs.com/liujiaxin2018/p/18018756

相关文章

  • 中端知识和工具+字符设备和块设备+LMA和VMA+gdb查看系统调用+vim查看指定文件链接的au
    中端知识和工具https://www.cnblogs.com/yjw951012/p/12865036.html抖动(Jitter)和偏移(skew)信号周期的长度总会有一定变化,从而导致下一个沿的到来时间不确定。这种不确定就是抖动(jitter)。因时钟线长度不同或负载不同,导致时钟到达相邻单元的时间不同,这个时间上的偏差就叫时钟偏......
  • Linux网络数据流通
    硬中断和软中断硬中断由与系统相连的外部设备(网卡、硬盘等)产生,通知操作系统外部设备状态变更。比如当网卡收到一个数据包时,就会产生硬中断。硬中断是外部设备对CPU的中断;硬中断是由硬件产生的,比如网卡、磁盘、时钟等。处于中断的驱动是需要运行在CPU上的,因此中断产生......
  • linux 中 计算一列数值中最大值、最小值、及最大值和最小值之差
     01、先排序,然后取首尾(数据大时不适用)[root@pc1test1]#lsa.txt[root@pc1test1]#cata.txt##测试文件833928246[root@pc1test1]#sort-na.txt|head-n1##最小值2[root@pc1test1]#sort-na.txt|tail-n1##......
  • Linux下查看文件的最后修改时间
    查看文件的详细信息statabc.txtFile:abc.txtSize:15Blocks:8IOBlock:4096regularfileDevice:fd06h/64774dInode:262168Links:1Access:(0776/-rwxrwxrw-)Uid:(0/root)Gid:(0/root)Access:2024......
  • QT_linux
    加载本地图片/*QPixmap类型对象*/QPixmapimage;/*加载*/image.load(":/image/cd.png");//不缩放ui->label->setScaledContents(false);//图片在标签中居中显示(水平和垂直方向均居中)ui->label->setAlignment(Qt::AlignCenter);pixbad2(":/1/bad.png");......
  • 【虚拟机新手起步04】2步完成kali linux安装。
    2步完成kalilinux安装一、选择kali镜像进行安装二、在vmware中打开虚拟机一.选择kali镜像进行安装:https://mirrors.tuna.tsinghua.edu.cn/kali-images/选择对应版本进行安装下载完成之后,解压这个压缩包二.在vmware中打开虚拟机选中虚拟机打开:正常使用END......
  • Linux命令基础,黑马程序员学习笔记
    Linux命令基础命令基础格式command[-options][parameter]command:命令本身-options:[可选,非必填]命令的一些选项,可以通过选项控制命令的行为细节parameter:[可选,非必填]命令的参数,多数用于命令的指向目标等示例:ls-l/home/itheimals是命令本身,-l是选项,/home/itheim......
  • 2024年,我又开始用Linux桌面作为主力系统了~
    前言19年的时候我买了一个matebook14笔记本,配置是8代i5和8G内存,在当时看来作为轻薄本是够用的,但是现在已经2024年了,这内存让我想起来去年苹果的新款macmini,丐版三千多给了8G的配置,数码圈都沸腾了......
  • Linux 环境下安装并配置 git
    Linux环境下安装并配置git本篇记录笔者配置git的全部流程。笔者使用Win10WSL下的Debian12。安装gitsudoapt-getinstallgit#sudoapt-getinstallgit-all笔者选择了git包,根据Debian网站,二者区别如下:Gitprovidesthegitmaincomponentswithminima......
  • 到什么程度才叫精通 Linux?
    大家好,我是陶朱公Boy,一个认真生活,总想超越自己的程序员。前言知乎上有一个提问:到什么程度才叫精通Linux?               ↓↓↓今天,我们就这个话题一起来做个讨论。我的回答在回答这个问题前,不妨先问大家几个问题:为什么我们需要操作系统?操......