免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1734 | 回复: 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 |显示全部楼层
  1. Get-Content wenjian.txt | ForEach-Object {
  2.         $文件名,$文件行数 = $_.split(': ')
  3.         if (Test-Path  $文件名)
  4.         {
  5.                 $真文件行数 = (Get-Content -path $文件名 -ReadCount 0 ).length
  6.                 if ($真文件行数 -eq $文件行数)
  7.                 {
  8.                 }
  9.                 else
  10.                 {
  11.                         Add-Content  -LiteralPath '.\error.txt' -Value "$真文件行数 $文件行数"
  12.                 }
  13.         }
  14.         else
  15.         {
  16.                 Add-Content  -LiteralPath '.\error.txt' -Value $文件名
  17.         }
  18. }
复制代码


按照我的理解写的ps1,win-linux通用。

你们知道吗?!!!!
我原来用“舒肤佳香皂”洗脸,现在我用“哦来呀洁面泥”了
装修师傅的电钻,知道么?原来要接220v电线才能转,现在都是充电的,不用接电线了。
而且电钻上还有led灯,一扣电钻扳机,就会照亮钻头附近位置!

同样道理,ps将会逐渐代替bash,bat!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP