发现在ubuntu和centos中有些命令还不一样,比如<<<可在centos中使用,但是ubuntu中不行

csv文件名以及格式如下

3669_20180121.csv

总笔数,2,总金额,21
2018011116200603729,2018011159999248,201700198,2018/01/11 00:00,1.00,一卡通充值,120
2018011116223903730,2018011159999789,201700198,2018/01/11 00:00,2.00,一卡通充值,120

需求:

1)如果文件名相同,则把总笔数数值以及总金额数值相加,把除一行外的其他行进行追加。

2)对于文件名不通的文件,则直接放在新文件夹中。

3)新文件夹只保存最近的30个文件

方法1,可在ubuntu和centos中使用

#!/bin/bash

filenum=
dir1=./upload_root/gdby
dir2=./upload_root/bzbygz
dir_merge=./download #删除旧文件
rm -f $dir_merge/*.csv dir1_select=`ls $dir1 | sort -r | head -$filenum`
dir2_select=`ls $dir2 | sort -r | head -$filenum` #2个文件夹共有的
echo "两个学校共有的文件名" for i in ${dir1_select}
do
for file2 in ${dir2_select}
do
if [ "$i" = "$file2" ];then
echo $i
num1=$(head -1 $dir1/$i | awk -F "," '{print $2}')
num2=$(head -1 $dir2/$i | awk -F "," '{print $2}')
money1=$(head -1 $dir1/$i | awk -F "," '{print $4}')
money2=$(head -1 $dir2/$i | awk -F "," '{print $4}') num_all=$((num1+num2))
money_all=$(echo $money1 $money2 | awk '{print $1+$2}') cp $dir1/$i $dir_merge
sed -ie "1 s#`echo $num1`#`echo $num_all`#; 1 s#`echo $money1`#`echo $money_all`#" $dir_merge/$i
#sed '1d' $dir2/$i >> $dir_merge/$i
tail -n +2 $dir2/$i >> $dir_merge/$i fi
done
done rm -f $dir_merge/*.csve #只在$dir1中有的:
echo "只在gdby中存在的文件"
for i in ${dir1_select}
do
for file2 in ${dir2_select}
do
if [ "$i" != "$file2" ];then
cp $dir1/$i $dir_merge
fi
done
done
#grep -q $i <<< ${dir2_select};if [[ $? -ne 0 ]];then cp $dir1/$i $dir_merge;fi;done #只在$dir2中有的:
echo "只在bzbygz存在的文件"
for i in ${dir2_select}
do
for file1 in ${dir1_select}
do
if [ "$i" != "$file1" ];then
cp $dir2/$i $dir_merge
fi
done
done

方法2,只能在centos中使用

#!/bin/bash

filenum=
dir1=./bzbygz
dir2=./gdby
dir_merge=./download #删除旧文件
rm -f $dir_merge/*.csv dir1_select=`ls $dir1 | sort -r | head -$filenum`
dir2_select=`ls $dir2 | sort -r | head -$filenum` #2个文件夹共有的
for i in ${dir1_select}
do grep -q $i <<< ${dir2_select} #<<<只能在centos中使用, grep -q安静模式,不打印任何标准输出。如果有匹配的内容则立即返回状态值0。
if [[ $? -eq 0 ]];then
echo $i
num1=$(head -1 $dir1/$i | awk -F "," '{print $2}')
num2=$(head -1 $dir2/$i | awk -F "," '{print $2}')
money1=$(head -1 $dir1/$i | awk -F "," '{print $4}')
money2=$(head -1 $dir2/$i | awk -F "," '{print $4}') num_all=$(($num1+$num2))
money_all=$(echo $money1 $money2 | awk '{print $1+$2}')
# money_all=$(echo "$money1+$money2"|bc) cp $dir1/$i $dir_merge
sed -ie "1 s#`echo $num1`#`echo $num_all`#; 1 s#`echo $money1`#`echo $money_all`#" $dir_merge/$i
#sed '1d' $dir2/$i >> $dir_merge/$i #除了第一行外,进行两个文件内容的拼接, 需要在第一个文件的末尾加上一个换行符,否则会导致文件1最后一行和文件2第一行在一行
echo -e "\n" >> $dir_merge/$i
tail -n +2 $dir2/$i >> $dir_merge/$i
sed -i '/^$/d' $dir_merge/$i #删除所有空白行
sed -i 's/\r//g' $dir_merge/$i #去掉^M
fi
done rm -f $dir_merge/*.csve #只在$dir1中有的:
for i in ${dir1_select};do grep -q $i <<< ${dir2_select};if [[ $? -ne 0 ]];then cp $dir1/$i $dir_merge;fi;done #只在$dir2中有的:
for i in ${dir2_select};do grep -q $i <<< ${dir1_select};if [[ $? -ne 0 ]];then cp $dir2/$i $dir_merge;fi;done

三. 执行定时任务时不执行

解决方法,crontab -e中这样写,并添加脚本的执行权限。
SHELL=/bin/bash
0 3 * * * cd /data/sftp/mysftp/ && ./file_merge.sh

案例1-合并2个不同文件夹中的csv文件到另外一个目录,相同的文件名进行数据合并,不同的文件名直接移到新文件夹的更多相关文章

  1. Path,Files巩固,题目:从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中

    这个题目用传统的File,InputStream可以做,但是如果用Files,Path类做,虽然思路上会困难一些,但是代码简洁了很多,以下是代码: import java.io.IOException ...

  2. 2. 假设当前文件夹中data.csv文件中存放了2020年某饭店营业额,第一列为日期(如2020-02-03),第二列为每天交易额(如3560),文件中第一行为表头,其余行为实 际数据。

    假设当前文件夹中data.csv文件中存放了2020年某饭店营业额,第一列为日期(如2020-02-03),第二列为每天交易额(如3560),文件中第一行为表头,其余行为实  际数据.编写程序,完成下 ...

  3. python找递归目录中文件,并移动到一个单独文件夹中,同时记录原始文件路径信息

    运营那边有个需求. 下载了一批视频文件,由于当时下载的时候陆陆续续创建了很多文件夹,并且,每个文件夹下面还有子文件夹以及视频文件,子文件夹下面有视频文件或者文件夹 现在因为需要转码,转码软件只能对单个 ...

  4. 去除文件夹中的.svn

    一.在Dos窗口中运行如下命令 for/r <你项目的路径> %i in (.svn) do rd /s /q %i 二.将“Delete SVN Folders”操作添加到右击菜单中 建 ...

  5. linux列出一个目录及其子目录下面的某种类型的文件

    linux列出一个目录及其子目录下面的某种类型的文件 作者:smarteng ⁄ 时间:2009年07月09日 ⁄ 分类: Linux命令 ⁄ 评论:0 怎么样把,一个目录及其所有的子目录下面的某种类 ...

  6. 为什么一个目录里放超过十个Mp4文件会导致资源管理器和播放程序变卡变慢?

    最近<鬼吹灯之精绝古城>大火,我也下载了剧集放在移动硬盘里. 起初还没事,当剧集超过十个时发现资源管理器变慢了,表现为上方的绿条总是在闪动前进,给文件改名都缓慢无比. 当剧集超过十五个时, ...

  7. 152-技巧-Power Query 快速合并文件夹中表格之自定义函数 TableXlsxCsv

    152-技巧-Power Query 快速合并文件夹中表格之自定义函数 TableXlsxCsv 附件下载地址:https://jiaopengzi.com/2602.html 一.背景 在我们使用 ...

  8. [R语言]读取文件夹下所有子文件夹中的excel文件,并根据分类合并。

    解决的问题:需要读取某个大文件夹下所有子文件夹中的excel文件,并汇总,汇总文件中需要包含的2部分的信息:1.该条数据来源于哪个子文件夹:2.该条数据来源于哪个excel文件.最终,按照子文件夹单独 ...

  9. python 读取文件夹中所有同类型的文件 并用pandas合并

    import globimport osimport pandas as pd read_path = 'D:/Data' # 要读取的文件夹的地址read_excel = glob.glob(os. ...

随机推荐

  1. 关于使用PL/SQL连接本地oracle时报错:ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务解决

    转自:https://blog.csdn.net/a657281084/article/details/49490069 问题:Oracle主服务和监听器服务已经启动,使用SQL Plus能够正常连接 ...

  2. 文件后缀与mime类型对应表

    //文档文件类型的 .ai application/postscript    .eps application/postscript    .exe application/octet-stream ...

  3. [Unity Shader笔记]渲染路径--Forward渲染路径

    [Unity Shader笔记]渲染路径--Forward渲染路径 (2014-04-22 20:08:25) 转载▼ 标签: shader unity renderingpath forward 游 ...

  4. cannot import name '_validate_lengths' from 'numpy.lib.arraypad'

    在Anaconda下新配置了tensorflow环境,结果在引入skimage 包时报错,错误提示from numpy.lib.arraypad import _validate_lengths,找不 ...

  5. [SoapUI] SOAP UI-Groovy Useful Commands

    Hi All, I have posted the SOAPUI and Groovy useful commands that may help you in your testing. Below ...

  6. vi/vim 消除搜索后的关键字高亮

    使用vi或vim命令搜索某个关键字之后,取消高亮显示的方法 只要输入:noh即可

  7. LWIP协议栈2-

    ->->->

  8. CodeForces 681C Heap Operations (模拟题,优先队列)

    题意:给定 n 个按顺序的命令,但是可能有的命令不全,让你补全所有的命令,并且要求让总数最少. 析:没什么好说的,直接用优先队列模拟就行,insert,直接放入就行了,removeMin,就得判断一下 ...

  9. CKEditor4.x整合教程-Xproer.WordPaster

    版权所有 2009-2017 荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webplug/wordpa ...

  10. 引用数据类型(类)和ArrayList

    引用数据类型(类) 类的类型为两种: 第一种,Java为我们提供好的类,如Scanner类,Scanner类等,这些已存在的类中包含了很多的方法与属性,可供我们使用. 第二种,我们自己创建的类,按照类 ...