发现在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. Ros学习——Cmakelists.txt文件解读

    1.过程 .Required CMake Version (cmake_minimum_required) //CMake 需要的版本 .Package Name (project()) //#定义工 ...

  2. linux 安装天气插件

    1. 用命令 sudo apt install gnome-shell-extension-weather 安装插件 但是在那之前你安装了 GNOME Shell Extensions 如果没有安装 ...

  3. 万能头文件#include<bits/stdc++.h>

    最近在打cf时赛后翻阅别人的代码总是会发现一个陌生而奇怪的头文件#include<bits/stdc++.h> 奇怪之处就在于基本上所有的代码只要用了这个头文件就不再写其他头文件了. 百度 ...

  4. maven filter插件只替换了部分变量问题

    maven filter简介 maven的resources插件,有一个filter的作用,能够在打包的时候,从特定文件里读取key-value对,替换配置文件中的占位符变量.很多线上线下有不同环境的 ...

  5. Part2_lesson2---ARM处理器工作模式

    arm公司发布的学习手册:ARM Architecture Reference Manual. 打开之: 找到Programmers' Model->A2.2 Processor modes. ...

  6. 使用Selenium&PhantomJS的方式爬取代理

    前面已经爬取了代理,今天我们使用Selenium&PhantomJS的方式爬取快代理 :快代理 - 高速http代理ip每天更新. 首先分析一下快代理,如下 使用谷歌浏览器,检查,发现每个代理 ...

  7. 编写高质量代码改善C#程序的157个建议——建议66:正确捕获多线程中的异常

    建议66:正确捕获多线程中的异常 多线程的异常处理需要采用特殊的方式.一下这种方式会存在问题: try { Thread t = new Thread((ThreadStart)delegate { ...

  8. Atcoder 2566 3N Numbers(优先队列优化DP)

    問題文N を 1 以上の整数とします. 長さ 3N の数列 a=(a1,a2,…,a3N) があります. すぬけ君は.a からちょうど N 個の要素を取り除き.残った 2N 個の要素を元の順序で並べ. ...

  9. 疑难杂症--已停止运行DBCC造成阻塞

    场景数据库因非法断电导致出现分配页上不一致,运行完DBCC CHECKDB后出现以下错误: 表错误: 表 't_pc_id' (ID 277576027).数据行在索引 'last_login_dat ...

  10. Backup--压缩备份和数据库压缩

    1> 即使数据库启用了页压缩或行压缩,压缩备份也可以有效减小备份的大小,压缩备份的压缩效率取决于表中的数据类型 2> 数据库压缩有利于降低备份时间(因为数据库变小) 3> 对已启用压 ...