您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页Shell脚本逐行读取文本内容并拆分,根据条件筛选文件

Shell脚本逐行读取文本内容并拆分,根据条件筛选文件

来源:意榕旅游网
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;110 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 #done23

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 ]; then32 #设定筛选条件

33 SERVER_ADDRESS=/mnt/server/ProductTest/$PARAM_2/FAIL/$PARAM_3/34 LOCAL_ADDRESS=/home/user/Desktop/result/35 TARGET_FILE_NAME=$(PARAM_1)_*.txt36 #执⾏拷贝

37 cp $(find \"$SERVER_ADDRESS\" -name \"$TARGET_FILE_NAME\") $LOCAL_ADDRESS38 fi39

40 done41 }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--

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务