Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何打印每个ID的最后一行?_Linux_Awk - Fatal编程技术网

Linux 如何打印每个ID的最后一行?

Linux 如何打印每个ID的最后一行?,linux,awk,Linux,Awk,我有一个ID列表(外显子),每个ID都有多个后缀,我想得到每个ID的最后一行 输入: 期望输出: 扫描每行时,您可以检查存储以前的“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 扫描每行时,您可以检查存储以前的“ID”,然

我有一个ID列表(外显子),每个ID都有多个后缀,我想得到每个ID的最后一行

输入: 期望输出:
扫描每行时,您可以检查存储以前的“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

扫描每行时,您可以检查存储以前的“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),当您更改字符串表示前一个是最大的,并且您将打印它时,它将不会得到最后一个,因此您将在最后打印数组的最后一项

!/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]}
/usr/bin/bash
fileString=$(cat文件名| tr“\n”“”)
数组=($fileString)
for((i=0;i<${#数组[@]}-1;i++)
做
如果[${array[$i]}!=${array[$i+1]}];然后
echo${array[$i]}
fi
完成
echo${array[${#array[@]}-1]}

当您的列表按顺序排列时,一个想法可以将所有内容放入数组中并通过它进行迭代(不使用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]}
/usr/bin/bash
fileString=$(cat文件名| tr“\n”“”)
数组=($fileString)
for((i=0;i<${#数组[@]}-1;i++)
做
如果[${array[$i]}!=${array[$i+1]}];然后
echo${array[$i]}
fi
完成
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}'文件

输出:

NM_203_exon_20
NM_0217_exon_9
NM_91_exon_17

由于文件已按每个id的后缀排序,因此打印每个id的最后一行

awk-F“"”NR==1{prev=$2}$2==prev{a=$0}$2=prev{print a;prev=$2}END{print$0}'文件

输出:

NM_203_exon_20
NM_0217_exon_9
NM_91_exon_17

对于
-s
(稳定排序)使用GNU排序:


对于
-s
(稳定排序)使用GNU排序:

$ tac file | sort -t_ -k2,2 -su
NM_0217_exon_9
NM_203_exon_20
NM_91_exon_17