免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2080 | 回复: 2

[文本处理] 求助高手 文本对比文件 [复制链接]

论坛徽章:
0
发表于 2019-04-02 16:20 |显示全部楼层
本帖最后由 xin2v 于 2019-04-03 11:02 编辑

每天会从客户那里 收到 文件和文件清单 ,要求如下

cat wenjian.txt
EXPORTVIPS_20190105030004.CSV: 24
EXPORTVIPS_20190106030003.CSV: 1
EXPORTVIPS_20190108030004.CSV: 4
EXPORTVIPS_20190214030004.CSV: 2

备注 上面第一列是文件名  第二列是文件的行数 中间用:和空格隔开


用wenjian.txt 里面的文件内容 做循环判断 判断当前目录下 是否存在cat 看到的文件名(第一列是文件名 第二列是文件行数 中间用冒号和空格 隔开 )
1 这些文件是否都存在 并且行数是否匹配
2 如果不存在或者行数不匹配 echo "file not OK" > error.txt

论坛徽章:
8
2016科比退役纪念章
日期:2018-10-24 08:24:0115-16赛季CBA联赛之北控
日期:2019-03-12 14:34:562016科比退役纪念章
日期:2019-04-01 10:33:0915-16赛季CBA联赛之山东
日期:2019-04-17 12:46:3215-16赛季CBA联赛之广夏
日期:2019-05-09 16:40:4015-16赛季CBA联赛之广夏
日期:2019-10-10 15:33:4015-16赛季CBA联赛之辽宁
日期:2019-10-15 08:37:0615-16赛季CBA联赛之北控
日期:2021-03-30 15:53:34
发表于 2019-04-03 13:20 |显示全部楼层
试试看
  1. #!/bin/bash
  2. fname="wenjian.txt"
  3. csvList=($(cut -f1 -d':' $fname))
  4. lineList=($(cut -f2 -d':' $fname))
  5. #csv文件个数
  6. csvNum=$(wc $fname|awk '{print $1}')
  7. #wc计的是换行符,所以清单文件最后一行不是空行的话,行数需要加1
  8. let csvNum+=1

  9. if [ -f "error.txt" ];then
  10.     rm -f "error.txt"
  11. fi

  12. for (( i=0;i<$csvNum;i++ ))
  13. do
  14.     if [[ -f ${csvList[$i]} ]];then
  15.         line=$(wc ${csvList[$i]}|awk '{print $1}')
  16.         #假设 csv文件最后一行不为空
  17.         let line+=1
  18.         if [[ $line -eq ${lineList[$i]} ]];then
  19.             #存在且行数匹配,继续
  20.             continue
  21.         else
  22.             echo "${csvList[$i]} not OK" >>error.txt
  23.         fi
  24.     else
  25.         echo "${csvList[$i]} not OK" >>error.txt
  26.     fi
  27. done
复制代码

论坛徽章:
0
发表于 2019-04-04 11:43 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP