zoukankan      html  css  js  c++  java
  • Shell脚本逐行读取文本内容并拆分,根据条件筛选文件

    • 时间:2018-11-13 整理:byzqy

    需求:

      最近帮朋友写了一段脚本,他的需求是根据一份产品清单,去服务器上捞取对应产品编号的测试Log,数量大概有9000~10000条左右。文本内容大致如下,数据有4列,分别表示:产品编号、员工编号、测试日期、质量等级。需要筛选出质量等级为“1”的产品的测试数据,数据存储在以各自员工编号命名的不同测试日期的文件夹下。log文件名中包含完整产品编号。

    文件:adc.txt

     1 S0001L0001;TALLYMAN01;20180101;1
     2 S0001L0002;TALLYMAN01;20180102;0
     3 S0001L0003;TALLYMAN01;20180103;1
     4 S0001L0004;TALLYMAN01;20180104;0
     5 S0001L0005;TALLYMAN01;20180105;1
     6 S0002L0006;TALLYMAN02;20180106;0
     7 S0002L0007;TALLYMAN02;20180107;1
     8 S0002L0008;TALLYMAN02;20180108;0
     9 S0002L0009;TALLYMAN02;20180109;1
    10 S00020L010;TALLYMAN02;20180110;0

    解决:

      1、使用循环逐行读取文本文件;

      2、然后再将每一行的文本按照分号(;)进行分割,得到4个参数,分别用来代表拿到的产品编号、员工编号、测试日期、质量等级;

      3、根据实际情况设定log存放的目录,并代入我们获取到的参数,必要时可使用通配符。执行查找并复制文件。

    脚本:catch_log.sh

     1 #!/bin/bash
     2 
     3 FILENAME=abc.txt
     4 
     5 function While_read_LINE(){
     6 #读取行内容
     7 cat $FILENAME | while read LINE
     8 do
     9 echo "$LINE"
    10 
    11 #拆分字符串到数组
    12 str=$LINE
    13 OLD_IFS="$IFS"
    14 IFS=";"
    15 arr=($str)
    16 IFS="$OLD_IFS"
    17 
    18 #遍历回显数组
    19 #for s in ${arr[@]}
    20 #do
    21 #echo "$s"
    22 #done
    23 
    24 #为自定义变量赋值
    25 PARAM_1=${arr[0]}
    26 PARAM_2=${arr[1]}
    27 PARAM_3=${arr[2]}
    28 PARAM_4=${arr[3]}
    29 
    30 #根据条件执行查找并拷贝
    31 if [ "$PARAM_4"x = "1"x ]; then
    32 #设定筛选条件
    33 SERVER_ADDRESS=/mnt/server/ProductTest/$PARAM_2/FAIL/$PARAM_3/
    34 LOCAL_ADDRESS=/home/user/Desktop/result/
    35 TARGET_FILE_NAME=$(PARAM_1)_*.txt
    36 #执行拷贝
    37 cp $(find "$SERVER_ADDRESS" -name "$TARGET_FILE_NAME") $LOCAL_ADDRESS
    38 fi
    39 
    40 done
    41 }
    42 
    43 While_read_LINE

    备注:

      1、在Ubuntu16.04上执行该bash文件时,记得要对catch_log.sh添加可执行权限;

      2、将abc.txt和bash文件放在同一目录下,否则abc.txt不会被找到;

      3、需要在Desktop上手动创建result文件夹,否则cp文件时找不到路径会报错;

      4、使用方法是打开终端(Terminal),然后将catch_log.sh拖进去,然后按下回车键执行。

    --the end--

  • 相关阅读:
    [一步一步MVC]第二回:还是ActionFilter,实现对业务逻辑的统一Authorize处理 OnActionExecuting内如何获取参数
    携程SQL面试题忘大牛解答解决思路
    一些.Net面试题 (BS 方向)
    关于SQL SERVER高并发解决方案
    锁sql server锁
    MSSQL WITH (NOLOCK) 脏读
    python dict的函数
    conda常用命令
    sess.run() 中的fetches和feed_dict
    Tensorflow检验GPU是否安装成功 及 使用GPU训练注意事项
  • 原文地址:https://www.cnblogs.com/jswl/p/9950833.html
Copyright © 2011-2022 走看看