找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 19279|回复: 10

[文本处理] [已解决]求助一个批处理,只取出每天的最早和最晚的时间

[复制链接]
发表于 2023-2-22 17:20:05 | 显示全部楼层 |阅读模式
本帖最后由 laolong 于 2023-2-23 12:25 编辑

文本文件 text.txt 中保存有如下格式的数据:
  1. 2022-12-01 08:50:38
  2. 2022-12-01 10:52:47
  3. 2022-12-01 13:01:03
  4. 2022-12-01 13:58:14
  5. 2022-12-01 18:33:11
  6. 2022-12-01 18:56:31
  7. 2022-12-01 19:32:00
  8. 2022-12-01 19:32:01
  9. 2022-12-02 08:54:28
  10. 2022-12-02 09:26:54
  11. 2022-12-02 10:15:47
  12. 2022-12-02 13:59:48
  13. 2022-12-02 17:24:50
  14. 2022-12-02 18:03:51
  15. 2022-12-05 09:10:37
  16. 2022-12-05 11:09:49
  17. 2022-12-05 12:59:48
  18. 2022-12-05 13:41:24
  19. 2022-12-05 15:23:46
  20. 2022-12-05 16:01:26
  21. 2022-12-05 18:05:07
  22. 2022-12-06 09:10:31
  23. 2022-12-06 09:47:02
  24. 2022-12-06 11:08:03
  25. 2022-12-06 16:06:40
  26. 2022-12-06 18:18:23
复制代码
想获取每天的第一个(最早)和最后一个(最晚)的记录到一个文本文件中,两个记录之间以 tab 隔开:
  1. 2022-12-01 08:50:38        2022-12-01 19:32:01
  2. 2022-12-02 08:54:28        2022-12-02 18:03:51
  3. 2022-12-05 09:10:37        2022-12-05 18:05:07
  4. 2022-12-06 09:10:31        2022-12-06 18:18:23
复制代码
先谢谢了

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2023-2-22 17:48:29 | 显示全部楼层
  1. #@&cls&powershell "type %~s0|out-string|iex"&pause&exit
  2. $a=@{}
  3. gc text.txt|%{
  4.     $b=$_ -split ' '
  5.     $a[$b[0]]+=,$b[1]
  6. }
  7. $a.keys|sort|%{
  8.     $b=$a[$_]|sort
  9.     "{0} {1}`t{0} {2}" -f $_,$b[0],$b[-1]
  10. }|sc txt.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2023-2-22 17:54:32 | 显示全部楼层
回复 2# idwma


    厉害厉害!强啊!  多谢多谢
 楼主| 发表于 2023-2-22 18:03:55 | 显示全部楼层
回复 2# idwma


    我看不懂代码,所以也无从下手修改。能否将输出格式改一下:日期 tab 最早的时间 tab 最晚的时间,这样可以直接导入 excel 来处理了,谢谢谢谢
  1. 2022-12-01        08:50:38        19:32:01
  2. 2022-12-02        08:54:28        18:03:51
  3. 2022-12-05        09:10:37        18:05:07
  4. 2022-12-06        09:10:31        18:18:23
复制代码
 楼主| 发表于 2023-2-22 18:11:49 | 显示全部楼层
倒数第二行尝试修改为
  1.     "{0}`t{1}`t{2}" -f $_,$b[0],$b[-1]
复制代码
完美了,之前我考虑不周,这下省事多了

再次感谢大侠相助
发表于 2023-2-22 20:49:18 | 显示全部楼层
  1. <# : PS
  2. @echo off
  3. powershell -noprofile -NoLogo "iex (${%~f0} | out-string)"> t.txt
  4. pause & exit
  5. #>
  6. gc text.txt|sort|group{ $_.split('')[0]}|%{$($_.group[0]+"`t"+$_.group[-1]) -replace "\s","`t"}
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2023-2-23 08:37:37 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2023-2-23 08:53 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "tokens=1,2" %%i in (text.txt) do (
  4.     if %%i neq !str1! (
  5.         if defined str1 (
  6.             echo,!str1!        !str2!        !str3!
  7.         )
  8.         set str1=%%i
  9.         set str2=%%j
  10.     ) else (
  11.         set str3=%%j
  12.     )
  13. )
  14. echo,!str1!        !str2!        !str3!)>1.txt
  15. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2023-2-23 09:00:59 | 显示全部楼层
回复 1# laolong

用第3方工具gawk( http://bcn.bathome.net/tool/4.1.3/gawk.exe )的实现方法如下:

  1. gawk "{a[$1]?(a[$1]>$2?a[$1]=$2:0):(a[$1]=$2);b[$1]?(b[$1]<$2?b[$1]=$2:0):(b[$1]=$2)}END{l=asorti(a,c);for(i=1;i<=l;i++){print c[i],a[c[i]]"\t"c[i],b[c[i]]}}" text.txt>result.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2023-2-23 10:27:51 | 显示全部楼层
回复 6# terse


    多谢多谢,可以完成
 楼主| 发表于 2023-2-23 10:28:53 | 显示全部楼层
回复 7# qixiaobin0715


    多谢多谢,可以完成
 楼主| 发表于 2023-2-23 10:29:22 | 显示全部楼层
回复 8# hfxiang


    多谢多谢,也可以完成
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 02:25 , Processed in 0.024272 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表