案例1-合并2个不同文件夹中的csv文件到另外一个目录,相同的文件名进行数据合并,不同的文件名直接移到新文件夹
发现在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文件到另外一个目录,相同的文件名进行数据合并,不同的文件名直接移到新文件夹的更多相关文章
- Path,Files巩固,题目:从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中
这个题目用传统的File,InputStream可以做,但是如果用Files,Path类做,虽然思路上会困难一些,但是代码简洁了很多,以下是代码: import java.io.IOException ...
- 2. 假设当前文件夹中data.csv文件中存放了2020年某饭店营业额,第一列为日期(如2020-02-03),第二列为每天交易额(如3560),文件中第一行为表头,其余行为实 际数据。
假设当前文件夹中data.csv文件中存放了2020年某饭店营业额,第一列为日期(如2020-02-03),第二列为每天交易额(如3560),文件中第一行为表头,其余行为实 际数据.编写程序,完成下 ...
- python找递归目录中文件,并移动到一个单独文件夹中,同时记录原始文件路径信息
运营那边有个需求. 下载了一批视频文件,由于当时下载的时候陆陆续续创建了很多文件夹,并且,每个文件夹下面还有子文件夹以及视频文件,子文件夹下面有视频文件或者文件夹 现在因为需要转码,转码软件只能对单个 ...
- 去除文件夹中的.svn
一.在Dos窗口中运行如下命令 for/r <你项目的路径> %i in (.svn) do rd /s /q %i 二.将“Delete SVN Folders”操作添加到右击菜单中 建 ...
- linux列出一个目录及其子目录下面的某种类型的文件
linux列出一个目录及其子目录下面的某种类型的文件 作者:smarteng ⁄ 时间:2009年07月09日 ⁄ 分类: Linux命令 ⁄ 评论:0 怎么样把,一个目录及其所有的子目录下面的某种类 ...
- 为什么一个目录里放超过十个Mp4文件会导致资源管理器和播放程序变卡变慢?
最近<鬼吹灯之精绝古城>大火,我也下载了剧集放在移动硬盘里. 起初还没事,当剧集超过十个时发现资源管理器变慢了,表现为上方的绿条总是在闪动前进,给文件改名都缓慢无比. 当剧集超过十五个时, ...
- 152-技巧-Power Query 快速合并文件夹中表格之自定义函数 TableXlsxCsv
152-技巧-Power Query 快速合并文件夹中表格之自定义函数 TableXlsxCsv 附件下载地址:https://jiaopengzi.com/2602.html 一.背景 在我们使用 ...
- [R语言]读取文件夹下所有子文件夹中的excel文件,并根据分类合并。
解决的问题:需要读取某个大文件夹下所有子文件夹中的excel文件,并汇总,汇总文件中需要包含的2部分的信息:1.该条数据来源于哪个子文件夹:2.该条数据来源于哪个excel文件.最终,按照子文件夹单独 ...
- python 读取文件夹中所有同类型的文件 并用pandas合并
import globimport osimport pandas as pd read_path = 'D:/Data' # 要读取的文件夹的地址read_excel = glob.glob(os. ...
随机推荐
- Leetcode catalogue
1. Array & List 1.1Sort Array的变更操作,好好运用尾指针:88题的end,75题的blueHead 88. Merge Sorted Array (Array) 7 ...
- Spring Data Jpa使用@Query注解实现模糊查询(LIKE关键字)
/** * * @param file_name 传入参数 * @return */ @Query(value = "select * from user where name LIKE C ...
- Mac shell使用技巧总结(转)
1.文件操作 常用目录 /Systme/Library/Extensions // 驱动所在目录 /User/XXX/Desktop // 桌面目录 资源库 chflags nohidden ~/Li ...
- spring4-1-Spring的简单介绍
Spring4.0 是 Spring 推出的一个重大版本升级,进一步加强了 Sring 作为 Java 领域第一开源平台的地位.Spring4.0 引入了众多 Java 开发者期盼的新特性,如泛型依赖 ...
- crm第一天
课程由1-7组成 自己实现的代码: 教程:
- [Cookie] Read Cookie and Pass in headers
在同一个Suite里 import com.eviware.soapui.support.types.StringToStringMap def headers = testRunner.testCa ...
- 让你大开眼界的10款Android界面设计
根据调查显示, iOS与Android的市场份额差距正越来越大.Android设备正在成为手机应用市场的主力军.如何从设计层面创造一个优美的app界面来吸引用户已然成为广大App开发者们必做的功课之一 ...
- JS对象转URL参数(原生JS和jQuery两种方式)
转自:点击打开链接 现在的js框架将ajax请求封装得非常简单,例如下面: $.ajax({ type: "POST", url: "some.php", da ...
- JS中变量和常量的定义
var只能声明一个变量,这个变量可以保存任何数据类型的值 ES6之前并没有定义声明常量的方式,ES6标准中引入了新的关键字const来定义常量 使用const定义常量后,常量无法改变 const a= ...
- JavaEE互联网轻量级框架整合开发(书籍)阅读笔记(10):通过注解(annotation)装配Bean之(@Configguration、@Component、@Value、@ComponentScan、@Autowired、@Primary、@Qualifier、@Bean)
一.通过注解(annotation)装配Bean 通过之前的学习,我们已经知道如何使用XML装配Bean,但是更多的时候已经不再推荐使用XML的方式去装配Bean,更多的时候会考虑注解(annotat ...