通过shell取多条重复数据的最后一条

时间:2024-04-01 13:42:45

任务说明:日志文件中存在多条记录,现要求取出文件中的某两列,而且是去重,取最新的一条记录(就是取这个ID最后出现的那一行的那两列)


脚本代码如下:

#shell声明

#!/bin/bash

#获取最后一行的行号

line_desc_num=`awk 'END{print NR}' log.txt`

#循环每一行,从第一行开始

for i in $line_desc_num

#进入循环

do

#取出这一行的第六列和第七列,用_隔开,并追加到一个新文件中

    output=`cat log.txt |awk -v bl=$i  -F'|' '{print $6"_"$7}'`
    echo "$output" >> /tmp/cs

#结束循环

done

#创建新文件来存储最终结果

touch newfile


#查看cs文件存为变量

all_text=`cat /tmp/cs`

#循环每一行

for k in $all_text

#开始循环

do

#取出id

  id=`echo $k|awk -F'_' '{print $1}'`

#判断这个id有没有在newfile中

  cat /tmp/newfile|grep $id >> /dev/null

#如果在$?返回的是0

if [ $? == 0 ];then

#取出这个id的行号

    line_num=`cat /tmp/newfile|grep -n "$id"|awk -F':' '{print $1}'`

#根据行号删除该行

   sed  -i "$line_num d"  /tmp/newfile

  #追加最新数据到newfile中

  echo $k >> /tmp/newfile

#打印出信息告知原来的已删除

    echo "pristine line is  delete...."

#如果不在newfile中 

else

#打印出inserting。。。

    echo "inserting....."

#将这一行追加到新文件中

    echo $i >> /tmp/newfile

#结束判断 

fi

#结束循环

done


图如下

通过shell取多条重复数据的最后一条


通过shell取多条重复数据的最后一条



通过shell取多条重复数据的最后一条


为了测试是取的最后一次的数据,进行手动测试

通过shell取多条重复数据的最后一条

通过shell取多条重复数据的最后一条


通过shell取多条重复数据的最后一条



测试结果成功

图中我是写的两个脚本,其实一个脚本应该也可以的,我给整合了,但是没测试。


相关文章