• 时间: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--

Shell脚本逐行读取文本内容并拆分,根据条件筛选文件的更多相关文章

  1. 【转】shell脚本中echo显示内容带颜色

    shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e.格式如下:   echo -e "\033[41;36m something here \033[0m&qu ...

  2. shell脚本中echo显示内容带颜色

    转自:http://www.cnblogs.com/lr-ting/archive/2013/02/28/2936792.html shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要 ...

  3. js读取文本内容,支持csv.txt

    js读取文本内容,支持csv.txt <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...

  4. shell脚本实现读取一个文件中的某一列,并进行循环处理

    shell脚本实现读取一个文件中的某一列,并进行循环处理 1) for循环 #!bin/bash if [ ! -f "userlist.txt" ]; then echo &qu ...

  5. 【转】shell脚本中echo显示内容带颜色的实现方法

    shell脚本中echo显示内容带颜色的实现方法 shell脚本里使用echo输出颜色  

  6. Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件

    本文通过Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件,代码如下: import java.io.File; import java.io.IOException; import ...

  7. Shell 读取文本内容

    在Linux中有很多方法逐行读取一个文件的方法,其中最常用的就是下面的脚本里的方法,而且是效率最高,使用最多的方法.为了给大家一个直观的感受,我们将通过生成一个大的文件的方式来检验各种方法的执行效率. ...

  8. python逐行读取文本

    一.使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. 二.需要导入import os 三.下面是逐行读取文件内容的三种方法: ...

  9. 2019.11.13课堂实验之用Linux下的shell脚本完成两文本交替输出

    有两个文本如下,实际中并不知道两文本各有多少行: 文本1.txt aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ccccccccccccccccccccccccccc ...

随机推荐

  1. Kafka之--python-kafka测试kafka集群的生产者与消费者

    前面两篇博客已经完成了Kafka的搭建,今天再来点稍高难度的帖子. 测试一下kafka的消息消费行为.虽然,kafka有测试的shell脚本可以直接测试,但既然我最近在玩python,那还是用pyth ...

  2. 【剑指offer】28. 对称的二叉树

    剑指 Offer 28. 对称的二叉树 知识点:二叉树:递归 题目描述 请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和它的镜像一样,那么它是对称的. 示例 输入:root = [1, ...

  3. java.io.NotSerializableException:异常解决

    创建的pojo类未实现Serializable接口,启动服务器会报此异常. 解决此问题 添加一个Serializable接口即可 1 import java.io.Serializable; 2 3 ...

  4. P2491 消防/P1099 树网的核

    P2491 消防/P1099 树网的核 双倍经验,双倍快乐. 题意 在一个树上选择一段总长度不超过\(s\)的链使所有点到该链距离的最大值最小. 输出这个最小的值. 做法 Define:以下\(s\) ...

  5. P2014选课

    洛谷P2014选课 一道树形DP题. f[i][j]表示i个点选j门课程的最大学分. 递推方程: for(int a=n;a>0;a--)//总共选择多少 for(int b=0;b<a; ...

  6. 第二十八篇 -- 写一个简陋的WIFI服务器界面

    效果图: Dlg.cpp // WIFIWMITestDlg.cpp : implementation file // #include "stdafx.h" #include & ...

  7. MySQL 到底是如何做到多版本并发的?

    之前的文章简单的介绍了 MySQL 的事务隔离级别,它们分别是:读未提交.读已提交.可重复读.串行化.这篇文章我们就来探索一下 MySQL 事务隔离级别的底层原理. 本篇文章针对 InnoDB 存储引 ...

  8. YGC问题排查

    在高并发下, Java程序的GC问题属于很典型的一类问题,带来的影响往往会被进一步放大. 不管是 「GC频率过快」还是「GC耗时太长」,由于GC期间都存在Stop The World问题,因此很容易导 ...

  9. SpringBoot 源码解析笔记

    作者笔记仓库:https://github.com/seazean/javanotes 欢迎各位关注我的笔记仓库,clone 仓库到本地后使用 Typora 阅读效果更好. 如果大家只关注 Sprin ...

  10. 时间转换 BASIC-14

    时间转换 给定一个以秒为单位的时间t,要求用"::"的格式来表示这个时间.表示时间,表示分钟,而表示秒,它们都是整数且没有前导的"0".例如,若t=0,则应输出 ...