Linux shell命令统计某列去重后的值

需求:根据MAC获取,MAC对应的硬件版本和软件版本。在根据硬件版本统计MAC的数量

$ head test_1.txt

00:07:67,EC2108,HWV010537P0000
00:07:63,Z83,ZNV861010P1225
00:07:67,EC6108V9U_ca_sccdx,HWV218012P0000
00:07:63,SBox8900hisi3716V3,ZGV865012P0001
00:07:67,EC6108V9U_ca_sccdx,HWV218012P0000
00:21:26,EC6108V9U_ca_sccdx,HWV218012P0000
00:07:67,EC6108V9U_ca_sccdx,HWV218012P0000
00:07:63,STBHD-ST7105-000,ZTV70433089P0002
00:21:26,EC6108V9U_ca_sccdx,HWV215012P0000
00:21:26,EC6108V9U_ca_sccdx,HWV218012P0000

第二列去重

$ cat test_2.txt | awk -F ',' '{print $2}' | sort | uniq

EC2108
EC6108V9U_ca_sccdx
SBox8900hisi3716V3
STBHD-ST7105-000
Z83

将字符串转化为列表

import os
path = "C:\\Users\\Administrator\\Desktop\\stb\\dd.txt"
read = open(path,"r")
list_ = []
for line in read:
  line_ = line.strip()
  list_.append(line_)
print(list_)

根据厂商和硬件版本获取对应的软件版本

方法一:

GET gather-012-20180109/_search
{
 "size": 0,
 "aggs": {
  "1": {
   "terms": {
    "field": "dev_hard_ver",
    "size": 200
   },
   "aggs": {
    "2": {
     "terms": {
      "field": "soft_ver",
      "size": 1
     }
    }
   }
  }
 }
}

方法二:

import os
from elasticsearch import Elasticsearch
path = "C:\\Users\\Administrator\\Desktop\\stb\\fact_stb.txt"
write_file = open(path,"a+")
es = Elasticsearch()
def get_Data(dev_hard_ver,dev_vendor_name):
  index_ = "gather-012-20180109"
  try:
    rs = es.search(index=index_,body={
      "size": 1,
       "query": {
        "bool": {
         "must": [
          {"term": {
           "dev_hard_ver": {
            "value": dev_hard_ver
           }
          }
         },
         {
          "term": {
           "dev_vendor_name": {
            "value": dev_vendor_name
           }
          }
         }
         ]
        }
       },
       "_source": ["soft_ver","dev_vendor_name","dev_hard_ver"]
    })
    return rs
  except:
    return -1
dev_hard_ver=["02L0B61701MTAS0001", "0x209", "0x441", "0x485", "0xE0A", "0xE17", "16060102L0B61701MTAS0001", "1828", "1903", "2035", "5202", "99007002L0B6170635100791", "9900B002L0B61701IHO3000T", "990104010004102300000001", "99010402L0B6083100000001", "990501010003170908A5C800", "A7.32.64.A0", "B860AV2.1", "BJDS2Z-52", "CHEP3000SC", "CHI619112", "CHIHO3000", "CHIHO3000A", "CHIHO3000JX2", "CHIHO33", "CHIHO3300A", "CHIHO3300AD", "CUB-ANDROIDSTB", "EC2106V1", "EC2108", "EC6108V9_pub_gdydx", "EC6108V9U_ca_sccdx", "EC6108V9U_pub_hbjdx", "EC6108V9U_pub_sccdx", "G2-40_2544", "HG510I", "HG650-TDSWH", "HG650-TDSWH-11", "HT670-V", "HY_V1.0", "HY107", "HY112", "HY127", "HY2021", "HY34E71C02L0B6V003HG510P04", "HY34E71C02L0B6V3.0HG510P10", "HY44170102L0B6V003HG510P04", "HY9900E0013798KK0120170001", "HY990104010004102300000001", "HYC37.E", "HYCHEP920SC", "HYCHEP921SC", "HYEE", "HYHG510IV1.0", "HYHG510PV3.0", "HYTY_H1.00.00", "HYV10-ANDROIDIGW-068", "HYYiX-G210V1.1", "IBHN-ANDROIDSTB-068", "IBHR-ANDROIDSTBGA-069", "IBHU-ANDROIDSTB-068", "IBHX-ANDROIDSTBGA-068", "IBHX-ANDROIDSTBGA-069", "IPTV-S63-V1.1", "IPTV-S65-V1.1", "IPTV-S65-V1.2", "ITV628 HD", "KB1.100.01H", "M8043V02", "MR222-DSGH-19", "mx_ca_sccdx", "S80-E-R1.01.01", "SBox8900hisi3716V3", "SBox8900hisi3716V386501007", "STBAB-ANDROIDSTB-068", "STBAB-ANDROIDSTBGA-069", "STBHD-AML8626X-000", "STBHD-ST7105-000", "STBHD-ST7105-128-256-000", "STBHO-AML8626X-000", "tgh0001", "TY_A1.00.00", "TY_H1.00.00", "V1", "V10-ANDROIDIGW-068", "V2.1", "Z82", "Z83", "Z85E", "ZXB700V5C(IBHL-000-000)", "ZXB860A(IBHR-ANDROIDSTB-068)", "ZXB860A(IBHR-ANDROIDSTBGA-068)"]
dev_vendor_name=["SCTY", "CHANGHONG", "Jiuzhou", "Jiuzhou", "Hisense", "Hisense", "SCTY", "SKYWORTH", "SKYWORTH", "SKYWORTH", "Huawei", "ZTE", "CHANGHONG", "SKYWORTH", "SKYWORTH", "Zhaoneng", "UTSTARCOM", "ZTE", "Fiberhome", "CHANGHONG", "CHANGHONG", "CHANGHONG", "CHANGHONG", "CHANGHONG", "CHANGHONG", "CHANGHONG", "CHANGHONG", "YOUHUA", "Huawei", "Huawei", "Huawei", "Huawei", "Huawei", "Huawei", "YINHE", "UTStarcom", "Fiberhome", "Fiberhome", "Zhaoneng", "SCTY", "Hisense", "Hisense", "Hisense", "SKYWORTH", "YHTC", "YHTC", "YHTC", "FiberHome", "SKYWORTH", "Huawei", "CHANGHONG", "CHANGHONG", "Hisense", "UTStarcom", "YHTC", "SCTY", "ZTE", "CCS", "ZTE", "ZTE", "ZTE", "ZTE", "ZTE", "ChinaGCI", "ChinaGCI", "ChinaGCI", "ChangHong", "30kt", "Huawei", "FiberHome", "Huawei", "ChinaGCI", "Sunniwell", "Sunniwell", "ZTE", "ZTE", "ZTE", "ZTE", "ZTE", "ZTE", "Yihekeji", "SCTY", "SCTY", "ZTE", "ZTE", "FiberHome", "Zhaoneng", "Zhaoneng", "Zhaoneng", "ZTE", "ZTE", "ZTE"]
for i in range(len(dev_vendor_name)):
  rs = get_Data(dev_hard_ver[i],dev_vendor_name[i])
  if rs!=-1:
    for hit in rs['hits']['hits']:
      soft_ver=hit['_source']['soft_ver']
      if soft_ver is None:
        soft_ver='None'
      write_file.write(soft_ver+"\n")
    else:
      write_file.write("-1" + "\n")
write_file.close()

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

(0)

相关推荐

  • Linux shell数组与关联数组的用法实例

    1. 关联数组 使用 declare -A(declare 的用法请使用 help 进行查看,help declare) 进行声明关联数组变量: $ declare -A fruits_price $ fruits_price=([apple]='$100' [orange]='$150') 列出关联数组的索引(也就是 key): $ echo ${!fruits_price[*]} $ echo ${!fruits_price[@]} 2. 序列数组 seq 方法创建 基本用法: $ a_nu

  • linux shell之pushd、popd和dirs的使用讲解

    1 问题 我们有时候需要保存多个路径,上下键切换不方便,用cd-只能到上个目录,我们可以用dirs和pushd和popd 2 dirs.pushd.popd dirs: 这个命令显示栈里面所有的路径,一定会包含当前路径,常用参数如下 dirs -v 显示栈里面的所有路径和下标,通过下标,我们可以用pushd +下标到这个目录,然后popd+下标把这个路径在栈里面弹出来, dirs -c 清除栈里所有路径,但是当前路径不会删除 pushd:我们可以添加目录到栈(dirs)里面,比如添加当前目录pu

  • linux shell之控制台打印各种颜色字体和背景的实现方法

    1 问题 控制台打印各种颜色字体和背景 字体颜色 #30:黑 #31:红 #32:绿 #33:黄 #34:蓝色 #35:紫色 #36:深绿 #37:白色 背景颜色 #40:黑 #41:深红 #42:绿 #43:黄色 #44:蓝色 #45:紫色 #46:深绿 #47:白色 echo -e "\e[43;35m chenyu\e[0m hello word" 比如上面的命令,43是背景颜色,35是字体颜色, \e[0m 是还原本色 2 代码实现 这里写的是color.sh文件如下 #!/b

  • linux的cut命令用法总结

    要用到,来mark一下: ubuntu@VM-0-15-ubuntu:~/taoge$ cat b.txt abc abcd ubuntu@VM-0-15-ubuntu:~/taoge$ cat b.txt | cut -c 1 a a ubuntu@VM-0-15-ubuntu:~/taoge$ cat b.txt | cut -c 2 b b ubuntu@VM-0-15-ubuntu:~/taoge$ cat b.txt | cut -c 1-2 ab ab ubuntu@VM-0-15-

  • Linux Shell在目录下使用for循环结合if查找文件的巧用

    1.for循环对目录做遍历,if判断文件是否为要查找的文件. 示例1: #!/bin/bash if [ $# -lt 1 ];then echo "Usage:$0 + filepath" exit fi #判断用户是否输入了参数 match=$1 #将要查的文件赋值给变量match found=0 #定义一个初始变量作为发生条件,当文件找到时对此变量重新赋值 for file in /etc/* #对目录进行遍历 do if [ $file == $match ];then #判断

  • Android之在linux终端执行shell脚本直接打印当前运行app的日志的实现方法

    1.问题 我们一般很多时候会需要在ubuntu终端上打印当前运行app的日志,我们一般常见的做法是 1).获取包名 打开当前运行的app,然后输入如下命令,然后在第一行TASK后面的就可以看到包名 adb shell dumpsys activity top 2).我们的终端安装了pidcat.py脚本,然后执行如下的命令就可以打印当前运行app的全日志, pidcat.py packageName 3).思考,为什么每次都需要这样重复的操作呢?一说到重复,我们应该立马想到是否可以用脚本解决重复

  • linux shell之通过标识测试文件系统属性的方法示例

    1 通过标识测试文件系统属性 [ -f $file_var ] :如果给定的变量包含正常的文件路径或文件名,则返回真. [ -x $var ] :如果给定的变量包含的文件可执行,则返回真. [ -d $var ] :如果给定的变量包含的是目录,则返回真. [ -e $var ] :如果给定的变量包含的文件存在,则返回真. [ -c $var ] :如果给定的变量包含的是一个字符设备文件的路径,则返回真. [ -b $var ] :如果给定的变量包含的是一个块设备文件的路径,则返回真. [ -w

  • Linux shell脚本的建立与执行

    在进行linux测试时编写脚本是必不可少的.最近经常使用Linux,感觉太频繁地敲击键盘有些累了,于是想到了Shell脚本.可以把太多的命令写成一个脚本,这样每次执行一遍  shell文件,就可以省去了敲击键盘的时间.于是在网上搜了一些有关Linux下脚本编程的内容. Shell不仅仅是命令的收集,而且是一门非常棒的编程语言.您可以通过使用shell使大量的任务自动化,shell特别擅长系统管理任务,尤其适合那些易用性.可维护性和便携性比效率更重要的任务. 用户可以使用任何文本编辑器编辑shel

  • linux shell中if的各种判断

    shell编程中使用到得if语句内判断参数 –b当file存在并且是块文件时返回真 -c当file存在并且是字符文件时返回真 -d当pathname存在并且是一个目录时返回真 -e当pathname指定的文件或目录存在时返回真 -f当file存在并且是正规文件时返回真 -g当由pathname指定的文件或目录存在并且设置了SGID位时返回为真 -h当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效 -k当由pathname指定的文件或目录存在并且设置了"粘滞"位时返回真

  • Linux shell环境下Zabbix Api的使用

    在linux shell环境下直接调用就可以,根据官网所述:在访问Zabbix中的任何数据之前,你需要登录并获取身份验证令牌.这可以使用该 user.login 方法完成. [root@localhost ~]# curl -i -X POST -H 'Content-Type: application/json' -d '{"jsonrpc": "2.0","method":"user.login","params

随机推荐