shell实现大批量word转码然后分析相关字段

摘要:
pwd)filetxt=“filetxt”ls-l${年}/|awk'/^d/{print$NF}'>2dounoconv-f${format}${line2}echo“[${line 2}]已转码…”#mv*。txt${filetxt}/${Year}done}functionMove(){exec4<“${Year}.logs”而readline4<

需求

需要从服务器中的所有附件(2013-2019) 共60G查找相关字段

在linux上面直接打开doc等是乱码的

思路

先全部附件转码为txt, 然后用grep遍历查找字段实现

转码shell

#!/bin/bash
#*************************************************************************
#         > File Name: doc.sh
#         > Author: chenglee
#         > Main : chengkenlee@sina.com
#         > Blog : http://www.cnblogs.com/chenglee/
#         > Created Time : 2019年04月10日 星期三 15时16分41秒
#*************************************************************************
Year="2018"
format="txt"
savedir=$(cd `dirname $0`; pwd)
filetxt="filetxt"

ls -l ${Year}/ |awk '/^d/ {print $NF}' > ${Year}.logs

function Find(){
    for element in `ls $1`
    do
        dir_or_file=$1"/"$element
        if [ -d $dir_or_file ]
        then
            Find $dir_or_file
        else
            echo $dir_or_file
        fi
    done
}
function Filter(){
    cat filelogs | grep doc | grep -v 'pdf|zip|rar|pptv' > filedir
}
function Unoconv(){
    exec 2<"filedir"
    while read line2<&2
    do
        unoconv -f ${format} ${line2}
        echo "[${line2}] 已转码..."
        #mv *.txt ${filetxt}/${Year}
    done
}
function Move(){
    exec 4<"${Year}.logs"
    while read line4<&4
    do
        mv ${Year}/${line4}/*.txt ${savedir}/${filetxt}/${Year}/
    done
}
function Filetxt(){
    if [ -d "${filetxt}/${Year}" ];then
        root_dir="${Year}"
        Find $root_dir > filelogs
        Filter
        sum=`cat filedir | wc -l`
        echo "总数为:${sum}"
        Unoconv
    else
        mkdir -p ${filetxt}/${Year}
        root_dir="${Year}"
        Find $root_dir > filelogs
        Filter
        sum=`cat filedir | wc -l`
        echo "总数为:${sum}"
        Unoconv
    fi
}
function main(){
    Filetxt
    echo "全部文件已实现转码为txt类型"
    Move
    echo "已转码的文件已转移到${savedir}/${filetxt}/${Year}/下"
}
main

注:先遍历附件中列出日期扔进filelogs这个文件和新建相对文件夹, 然后把所有能转码的doc和docx文件全部扔进filedir文件, 然后脚本直接识别这个文件中的目录文件, 转码方式是libreoffice+unoconv, 全部转码完成会自动把已转好的txt文件转移到filetxt这个文件夹中.

shell实现大批量word转码然后分析相关字段第1张

注:我这是双开

工具

yum install libreoffice unoconv -y

注:也可以自己下载包安装, 我偷个懒是直接yum拉取的

 检索shell

#!/bin/bash
#*************************************************************************
#         > File Name: crawler.sh
#         > Author: chenglee
#         > Main : chengkenlee@sina.com
#         > Blog : http://www.cnblogs.com/chenglee/
#         > Created Time : 2019年04月10日 星期三 10时52分31秒
#*************************************************************************

filetxt="TXT"

function If(){
    exec 6<"NameFile"
    while read line6<&6
    do
        grep -rn "${line6}" ${filetxt}/ > logs/result-${line6}.logs
        echo "检索${line6}完毕..."
    done
}
function main(){
    If
}
main

注:全部转好之后,新建一个文件, 名称为NameFile, 里面换行写入需要查找的字段, 然后脚本会自动去读每行字符作为变量, 然后把所有结果扔进logs这个文件夹.

维护shell

#*************************************************************************
#         > File Name: unockill.sh
#         > Author: chenglee
#         > Main : chengkenlee@sina.com
#         > Blog : http://www.cnblogs.com/chenglee/
#         > Created Time : 2019年04月10日 星期三 22时20分45秒
#*************************************************************************
#!/bin/bash

function killAll(){
    echo "等待10秒开始判断"
    sleep 10;
    StringName=`ps aux | grep unoconv | grep -v grep | awk -F '/' '{print$NF}' | awk -F '.' '{print$1}'`
    if [ "$stringname" != "$StringName" ];then
        echo "[转码正常]"
    else
        echo "[卡住了]... 准备干掉当前进程"
        ps aux | grep unoconv | grep -v grep | awk -F ' ' '{print$2}' | xargs kill -9
    fi
}
function main(){
    while [ "1" = "1" ]
    do
        stringname=`ps aux | grep unoconv | grep -v grep | awk -F '/' '{print$NF}' | awk -F '.' '{print$1}'`
        killAll
    done
}
main

注:这个是配合转码shell一起使用的, 每10秒检测一下进程(时间可以根据自己调, 一个一般5秒之内能转好), 如果卡住了, 干掉当前的进行下一个.

免责声明:文章转载自《shell实现大批量word转码然后分析相关字段》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇本机不装Oracle,使用plsql连接远程Oracle的方法SSO的简单实现下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

QQ简单登录

1.下载QQ官方API文档,导入对应的包 2.在Info->URL Types文件添加 Identifier:tencent  URL Schemes:tencent+应用appkey(去腾讯后台注册) 3.Appdelegate文件 #pragma mark --- QQLogin----- - (BOOL)application:(UIAppli...

bat 批处理之提取带有关键字的整行数据

用于在log中检索出insert sql语句,主要用于数据恢复 前言: a.txt 里面存放的是 需要查找的关键字 b.bat limian 存放的是执行程序 生成的文件存放在 c.txt(自动创建)中 a.txt 与 b.bat 同级,同时与查找文件同级 b.bat具体内容如下:( 16.log 与17.log 是需要检索的文件,空格隔开) @echo...

批量安装Zabbix_Agent

使用自动化部署工具Ansible批量部署zabbix_agent. 1. 安装Ansible   yum –y install ansible   内网情况下,现在ansible及其依赖的rpm包,添加到yum源进行安装。 2. 主机配置文件   在/etc/ansible中添加主机,主机配置文件为hosts,也可以在ansible.cfg中修改配置  ...

Chapter 1. Hello, Perl/Tk

Chapter 1. Hello, Perl/Tk 内容: Perl/Tk Concepts Some Perl/Tk History Getting Started with Perl/Tk Hello World Example Unsolicited Advice Debugging and PrototypingPerl/Tk Programs T...

Jmeter入门(4)- 注意事项

一、中文乱码问题的解决方法 1. 将HTTP请求的内容编码改成UTF-8 2. 修改配置文件jmeter.properties 将jmeter安装目录的bin目录下的jmeter.properties文件打开; 找到 sampleresult.default.encoding的值设置为UTF-8(注意:最前面的#号需要去掉); 修改了配置文件,需...

linux的自启动服务脚本的(/etc/rc.d/init.d或者其链接/etc/init.d)

转载地址:http://www.cnblogs.com/diyunpeng/archive/2009/11/11/1600886.html Linux有自己一套完整的启动体系,抓住了linux启动的脉络,linux的启动过程将不再神秘。 本文中假设inittab中设置的init tree为: /etc/rc.d/rc0.d/etc/rc.d/rc1.d/e...