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--
Shell脚本逐行读取文本内容并拆分,根据条件筛选文件的更多相关文章
- 【转】shell脚本中echo显示内容带颜色
shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e.格式如下: echo -e "\033[41;36m something here \033[0m&qu ...
- shell脚本中echo显示内容带颜色
转自:http://www.cnblogs.com/lr-ting/archive/2013/02/28/2936792.html shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要 ...
- js读取文本内容,支持csv.txt
js读取文本内容,支持csv.txt <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...
- shell脚本实现读取一个文件中的某一列,并进行循环处理
shell脚本实现读取一个文件中的某一列,并进行循环处理 1) for循环 #!bin/bash if [ ! -f "userlist.txt" ]; then echo &qu ...
- 【转】shell脚本中echo显示内容带颜色的实现方法
shell脚本中echo显示内容带颜色的实现方法 shell脚本里使用echo输出颜色
- Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件
本文通过Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件,代码如下: import java.io.File; import java.io.IOException; import ...
- Shell 读取文本内容
在Linux中有很多方法逐行读取一个文件的方法,其中最常用的就是下面的脚本里的方法,而且是效率最高,使用最多的方法.为了给大家一个直观的感受,我们将通过生成一个大的文件的方式来检验各种方法的执行效率. ...
- python逐行读取文本
一.使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. 二.需要导入import os 三.下面是逐行读取文件内容的三种方法: ...
- 2019.11.13课堂实验之用Linux下的shell脚本完成两文本交替输出
有两个文本如下,实际中并不知道两文本各有多少行: 文本1.txt aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ccccccccccccccccccccccccccc ...
随机推荐
- centos7 源码安装指定版本的php7
很多时候可能会遇到需要手动源码安装软件的时候,所以自己实践了一把,并且把安装过程中遇到的问题,以及在网上找到的解决办法(实测有效)都记录下来,方便日后学习实践. 1. 系统环境 # cat /etc/ ...
- POJ3615-Floyd
http://poj.org/problem?id=3615 因为只需要求所在路径的最大高度的最小值,而且n<=300,我们可以用floyd跑. g[i][j]=min(g[i][j],max( ...
- Apereo CAS 4.1 反序列化命令执行漏洞
命令执行 java -jar apereo-cas-attack-1.0-SNAPSHOT-all.jar CommonsCollections4 "touch /tmp/success&q ...
- 华为高斯DB(for MySQL)搭建演示
产品架构 云数据库 GaussDB(for MySQL)整体架构自下向上分为三层. 存储层: 基于华为DFV存储,提供分布式.强一致和高性能的存储能力,此层来保障数据的可靠性以及横向扩展能力. 存储抽 ...
- ES11中的bigint
上一周小编因为自己的事情,没有持续更新,还望大家谅解,趁着今天醒得早,小编继续和大家学(si)习(ke)es11中的新语法.在js中,对整数类型的数据,存在着最大极限,这个极限就是 const max ...
- OI卷题记录
2021.8.2 LG3386 匈牙利算法 二分图 LG1377 笛卡尔树 题解 2021.8.3 LG2962 \(\text{Meet in middle}\) LG3389 高斯消元 高斯-约旦 ...
- 从Python到Go:初学笔记
本文记录了我在学习Go的过程时的一些笔记,主要是比较Python和Go之间的差异并作简单描述,以此使Python程序员对Go语言的特性有简略的了解.初学难免有纰漏,欢迎各位批评指正补充交流,谢谢. 数 ...
- JVM 常用监控工具
概述 给一个系统定位问题的时候,知识.经验是关键基础,数据是依据,工具是运用知识处理数据的手段. 这里说的数据包括但不限于异常堆栈.虚拟机运行日志.垃圾收集器日志.线程快照(threaddump/ja ...
- postman怎么调中文
事先准备 1 安装好postman. 下载网址:https://www.postman.com/downloads/ 2 下载好app.zip中文压缩包,下载地址:https://wws.lanzou ...
- 『Java』接口的使用方法
以下三个文件存在于同一个包下: 定义接口Dome_Interface.java: package cn.xxmmqg.Interface; // 接口不能直接使用,必须有一个"实现类&quo ...