发现在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. ubuntu18 tensorflow faster_rcnn cpu训练自己数据集

    (flappbird) luo@luo-ThinkPad-W540:tf-faster-rcnn$ ./experiments/scripts/train_faster_rcnn.sh 0 pasca ...

  2. Lunix7 开放指定端口

    systemctl unmask firewalld.service 此时可以正常启动Firewall了. 接下来顺便讲述一下Firewall的安装,及一些简单配置.   查看状态,看电脑上是否已经安 ...

  3. php static 变量声明

    <?phpfunction test($key){ static $array = array();  /* 静态变量是只存在于函数作用域中的变量,注释:执行后这种变量不会丢失(下次调用这个函数 ...

  4. EZOJ #226

    传送门 分析 我们可以建一个k层图,把dp转移的三维对应到每个点上,每个第k层点连向0层点 我们让第0层点为实点其余为虚点,只要碰到虚点就dfs到他连得所有实点再将实点入队即可 代码 #include ...

  5. [SoapUI] UrlEncode编码/UrlDecode解码网站

    http://tool.chinaz.com/Tools/URLEncode.aspx 解码: 编码:

  6. VMware 桥接模式 复制物理网络连接状态的作用

    参考: https://docs.vmware.com/cn/VMware-Workstation-Pro/15.0/com.vmware.ws.using.doc/GUID-826323AD-D01 ...

  7. Win 7 Windows Update无法自动更新解决方案

    最近发现系统很长时间没有自动更新过了,手动更新后,提示返回错误码WindowsUpdate_8024402F.网络上搜索到的解决方法大多是删除更新临时目录,重启WINDOWS UPDATE服务,然而试 ...

  8. IBatis模糊查询

    IBatis模糊查询  补充: mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * ...

  9. 实践作业3:白盒测试----junit的难点DAY11.

    本次白盒测试 需要独立完成整个项目和工具的配置安装运行操作,并编写.运行测试脚本,并完成实验的一些小细节等等. 首先,导入Junit测试框架所需的Jar包 然后编写测试脚本,为.java运行程序,见打 ...

  10. PHP Windows系统下调用OpenOffice

    项目需要把用户上传的word文档转换为pdf文件,方便用户浏览.经过谷歌百度找到PHP可以使用COM组件调用微软的openoffice来实现文档转换 1,安装OpenOffice 安装OpenOffi ...