标题: [文本处理] 请问BAT或PowerShell如何按符合时间条件比较列的数值? [打印本页]
作者: 娜美 时间: 2023-9-11 21:34 标题: 请问BAT或PowerShell如何按符合时间条件比较列的数值?
请问如何按符合时间和条件比较列的数值
可请移步用源文件测
https://wwkt.lanzoul.com/iRSCa181yj6f- 1.txt
- 1 Jun 10, 2023 08:39:51.019462000 时间 1 1 6f89b2a23d
- 2 Jun 10, 2023 08:39:51.021000000 时间 1 2 6f89b2a23d47
- 3 Jun 10, 2023 08:39:51.029190000 时间 1 3 6f89b2a23d4701b
- 4 Jun 10, 2023 08:39:51.030724000 时间 1 4 6f89b2a23d4701b8eebabcf
- 5 Jun 10, 2023 08:39:51.898038000 时间 2 5 bb5c43db737f41842ec
- 6 Jun 10, 2023 08:39:51.898038000 时间 2 6 bb5c43db737f41
- 7 Jun 10, 2023 08:39:51.900620000 时间 3 7 6f89b2a23d4701b8eebabc9
- 8 Jun 10, 2023 08:39:51.900620000 时间 3 8 6f89b2a23d4701
- 9 Jun 10, 2023 08:39:51.902646000 时间 4 9 00
- 10 Jun 10, 2023 08:40:01.081414000 时间 5 10 6f8
- 11 Jun 10, 2023 08:40:01.082950000 时间 6 11 6f89b
- 12 Jun 10, 2023 08:40:01.084486000 时间 7 12 6f
- 13 Jun 10, 2023 08:40:01.086022000 时间 0 13 6f89
-
- 4 Jun 10, 2023 08:39:51.030724000 时间 1 4 6f89b2a23d4701b8eebabcf
- 6 Jun 10, 2023 08:39:51.898038000 时间 2 6 bb5c43db737f41
- 7 Jun 10, 2023 08:39:51.900620000 时间 3 7 6f89b2a23d4701b8eebabcf
- 9 Jun 10, 2023 08:39:51.902646000 时间 9 9 00
-
- 2.txt
- 4 Jun 10, 2023 08:39:51.030724000 时间 1 4 6f89b2a23d4701b8eebabc0
- 6 Jun 10, 2023 08:39:51.898038000 时间 2 6 bb5c43db737f41
- 7 Jun 10, 2023 08:39:51.900620000 时间 3 7 6f89b2a23d4701b8eebabcf
- 9 Jun 10, 2023 08:39:51.902646000 时间 9 9 00
-
-
- 3.txt
- 4 Jun 10, 2023 08:39:51.030724000 时间 1 4 6f89b2a23d4701b8eebabc1
- 6 Jun 10, 2023 08:39:51.898038000 时间 2 6 bb5c43db737f41
- 7 Jun 10, 2023 08:39:55.900620000 时间 3 7 6f89b2a23d4701b8eebabc0
- 9 Jun 10, 2023 08:39:51.902646000 时间 9 9 00
-
- 5.txt
- 4 Jun 10, 2023 08:39:51.030724000 时间 3 4 6f89b2a23d4701b8eebabc0
- 6 Jun 10, 2023 08:39:51.898038000 时间 2 6 bb5c43db737f41
- 7 Jun 10, 2023 08:39:51.900620000 时间 1 7 6f89b2a23d4701b8eebabcf
- 9 Jun 10, 2023 08:39:51.902646000 时间 9 9 00
-
- 6.txt
- 4 Jun 10, 2023 08:39:51.030724000 时间 1 4 6f89b2a23d4701b8eebabc0
- 6 Jun 10, 2023 08:39:51.898038000 时间 0 6 bb5c43db737f41
- 7 Jun 10, 2023 08:39:51.900620000 时间 3 7 6f89b2a23d4701b8eebabcf
- 9 Jun 10, 2023 08:39:51.902646000 时间 9 9 00
复制代码
检查后得到这些文本名称结果
>out.txt
1.txt
2.txt
请 批量检查100多个类似文件
if 将 Tab "\t" 视作分隔符, 如果第3列 上 中 下 连续有 1|2|3 数字情况, 中间必须至少有一个有2,中间没有2跳过,则检查第2列的时间从最近的数值"1"行 , 至到数值"3" 的行时间是否在2秒之内,如果符合,则检查这2行数值"1"和数值"3"的行的第5列数值是否相同,如果检查到不相同,则需要输出记录该文件名称,
第3列中这种上 中 下有 1|2|3 数字排列是可能有很多行,也可能仅有2行或3行情况,只取距离最近数值"1"行和有数值"3"行的第5列数值比较是否相同就行, 但他们中间必须至少有一个有2 否则条件不符合
时间精确到秒就行, 当然能精确计算到纳秒也行
符合的3个条件:
如果第3列符合条件: 其上 中 下行, 顺序必须有 1|2|3 , 中间可以有连续多个2的行, 但不能是其他数字, 但不能是其他数字
如果数值"1"行至到数值"3" 的行时间符合在2秒内, 秒的数字最好可手动更改
如果都符合以上条件, 则需要检查数值"1"和数值"3"的这2行的第5列数值是否相同,如果检查到不相同,则需要输出记录该文件名称,
All is UTF-8编码文本
bat ps1 shell 都行 Thanks
深入补充一些有助于理解说明
按第2列的时间是否符合和第3列条件是否符合, 从而比较第5列的数值是否相同
如果第3列条件符合: 即可以匹配其上 中 下行, 顺序是有 1,2,3数字, 中间可以有连续多个2的行, 但不能是其他数字
如果第3列数值"1"行至到数值"3" 的行时间符合在2秒内, 秒的数字最好可手动更改
如果都符合以上条件, 则需要检查数值"1"和数值"3"的这2行的第5列数值是否相同,如果检查到不相同,则需要输出记录该文件名称
像这样的第2列时间, 第3列数值, 1到3之中只有2 或多个2都行, 他们条件都符合, 他们对应的第5列数值也不同,
第3列 如果有连续发生多个"1"和多个"3" 的行情况, 取距离最近的数值"1"和数值"3" 的行来处理计算为准
1.txt
1 Jun 10, 2023 08:39:51.019462000 时间 1 1 6f89b2a23d
2 Jun 10, 2023 08:39:51.021000000 时间 1 2 6f89b2a23d47
3 Jun 10, 2023 08:39:51.029190000 时间 1 3 6f89b2a23d4701b
4 Jun 10, 2023 08:39:51.030724000 时间 1 4 6f89b2a23d4701b8eebabcf
5 Jun 10, 2023 08:39:51.898038000 时间 2 5 bb5c43db737f41842ec
6 Jun 10, 2023 08:39:51.898038000 时间 2 6 bb5c43db737f41
7 Jun 10, 2023 08:39:51.900620000 时间 3 7 6f89b2a23d4701b8eebabc9
8 Jun 10, 2023 08:39:51.900620000 时间 3 8 6f89b2a23d4701
9 Jun 10, 2023 08:39:51.902646000 时间 4 9 00
10 Jun 10, 2023 08:40:01.081414000 时间 5 10 6f8
11 Jun 10, 2023 08:40:01.082950000 时间 6 11 6f89b
12 Jun 10, 2023 08:40:01.084486000 时间 7 12 6f
13 Jun 10, 2023 08:40:01.086022000 时间 0 13 6f89
所以该文件应在输出文件中标注
>out.txt
1.txt
作者: 娜美 时间: 2023-9-11 21:46
本帖最后由 娜美 于 2023-9-11 21:50 编辑
在这里添加多一些不符合条件例吧, 主题不再编辑了, 害怕整乱了,
第3列的数字"1" 至数字"3" 中间必须只能是2, 其中可以有很多行 也可以只有1行是"2" 但不能是其它数字
- 7.txt
- 4 Jun 10, 2023 08:39:51.030724000 时间 1 4 6f89b2a23d4701b8eebabcf
- 5 Jun 10, 2023 08:39:51.898038000 时间 2 5 bb5c43db737f41842ec
- 6 Jun 10, 2023 08:39:51.898038000 时间 9 6 bb5c43db737f41
- 7 Jun 10, 2023 08:39:51.900620000 时间 3 7 6f89b2a23d4701b8eebabc9
复制代码
作者: 77七 时间: 2023-9-11 22:45
1楼的文本 时间后面紧跟着一个 tab,提供的压缩包内文本,时间后是空格。
作者: 娜美 时间: 2023-9-11 23:01
回复 3# 77七
提供的压缩包内文本我又重新仔细检查过 时间后面确认是Tab键符哦, 不是空格, 不知道为什么会发生这种情况的, 如果时间后面紧跟的是空格情况是不对的, 请将变成是Tab "\t" 键符 即可
作者: Five66 时间: 2023-9-11 23:18
额,看不懂
最好给个执行后的结果
作者: 77七 时间: 2023-9-11 23:18
回复 4# 娜美
是我看错了,我这里显示的 tab 非常短
作者: 娜美 时间: 2023-9-11 23:46
本帖最后由 娜美 于 2023-9-12 07:58 编辑
回复 5# Five66
Sorry,你图像好模糊, 标注的字似乎很难看的清
如果第3列条件符合: 即可以匹配其上 中 下行, 顺序是有 1,2,3数字, 中间可以有连续多个2的行, 但不能是其他数字
如果第3列数值"1"行至到数值"3" 的行时间符合在2秒内, 秒的数字最好可手动更改
如果都符合以上条件, 则需要检查数值"1"和数值"3"的这2行的第5列数值是否相同,如果检查到不相同,则需要输出记录该文件名称,
像这样的第2列时间, 第3列数值, 1到3之中只有2 或多个2都行, 他们条件都符合, 他们对应的第5列数值也不同,
1.txt
1 Jun 10, 2023 08:39:51.019462000 时间 1 1 6f89b2a23d
2 Jun 10, 2023 08:39:51.021000000 时间 1 2 6f89b2a23d47
3 Jun 10, 2023 08:39:51.029190000 时间 1 3 6f89b2a23d4701b
4 Jun 10, 2023 08:39:51.030724000 时间 1 4 6f89b2a23d4701b8eebabcf
5 Jun 10, 2023 08:39:51.898038000 时间 2 5 bb5c43db737f41842ec
6 Jun 10, 2023 08:39:51.898038000 时间 2 6 bb5c43db737f41
7 Jun 10, 2023 08:39:51.900620000 时间 3 7 6f89b2a23d4701b8eebabc9
8 Jun 10, 2023 08:39:51.900620000 时间 3 8 6f89b2a23d4701
9 Jun 10, 2023 08:39:51.902646000 时间 4 9 00
10 Jun 10, 2023 08:40:01.081414000 时间 5 10 6f8
11 Jun 10, 2023 08:40:01.082950000 时间 6 11 6f89b
12 Jun 10, 2023 08:40:01.084486000 时间 7 12 6f
13 Jun 10, 2023 08:40:01.086022000 时间 0 13 6f89
所以该文件应在输出文件中标注
>out.txt
1.txt
作者: Five66 时间: 2023-9-12 00:00
回复 7# 娜美
这样应该清晰点了吧
作者: 娜美 时间: 2023-9-12 00:06
本帖最后由 娜美 于 2023-9-12 08:10 编辑
回复 8# Five66
嗯清晰了一些, 不是取出行哦, 而是在符合这些条件下, 比较第5列数值是否相同
第3列 如果有连续发生多个"1"和多个"3" 的行情况, 取距离最近的数值"1"和数值"3" 的行来处理计算为准, 中间的2有多少行为数值"2"不用管, 1和3中间但至少要有一行是数值"2" , 1和3中间除了是2, 不能有其他数字
例
如第3列有如下情况
1
1
2
3
3
5
在主题已增补一些说明, 请回看主题目
作者: 77七 时间: 2023-9-12 10:21
本帖最后由 77七 于 2023-9-12 11:49 编辑
- @echo off
- chcp 65001 >nul
- rem 批处理保存为utf-8编码格式
- set /a m=n=2
- set /a "Jan=1,Feb=2,Mar=3,Apr=4,May=5,Jun=6,Jul=7,Aug=8,Sep=9,Oct=10,Nov=11,Dec=12"
- for /f "delims=" %%x in ('dir /b /a-d *.txt') do (
- setlocal enabledelayedexpansion
- for /f "useback tokens=1-9* delims=,. " %%a in ("%%x") do (
- if %%h equ 1 (
- set t1=%%d-!%%b!-%%c %%e
- set t2=%%f
- set ss1=%%j
- set s2=
- ) else if %%h equ 2 (
- if defined ss1 (
- set s2=1
- )
- ) else if %%h equ 3 (
- if defined s2 (
- call :1 "!t1!" "%%d-!%%b!-%%c %%e"
- if "%%f" geq "!t2!" (
- set /a m=n-1
- )
- if !secs! leq !m! (
- if "!ss1!" neq "%%j" (
- if not defined _"%%x" (
- >>out.txt echo %%x
- set _"%%x"=1
- )
- )
- )
- set ss1=
- set s2=
- )
- ) else (
- set ss1=
- )
- )
- endlocal
- )
- pause
- exit
-
- :1
- ::日期时间差 code by foxjl
- set date1=%~1
- set date2=%~2
- for /f "tokens=1,2,3,4,5,6,7 delims=-/:. " %%i in ("%date1%") do ((set Y1=%%i) && (set M1=%%j) && (set D1=%%k) && (set H1=%%l) && (set F1=%%m) && (set S1=%%n) && (set MS1=%%o))
- for /f "tokens=1,2,3,4,5,6,7 delims=-/:. " %%i in ("%date2%") do ((set Y2=%%i) && (set M2=%%j) && (set D2=%%k) && (set H2=%%l) && (set F2=%%m) && (set S2=%%n) && (set MS2=%%o))
- set /a secs=((d2-32075+1461*(y2+4800+(m2-14)/12)/4+367*(m2-2-(m2-14)/12*12)/12-3*((y2+4900+(m2-14)/12)/100)/4)*86400+H2*3600+F2*60+S2)-((d1-32075+1461*(y1+4800+(m1-14)/12)/4+367*(m1-2-(m1-14)/12*12)/12-3*((y1+4900+(m1-14)/12)/100)/4)*86400+H1*3600+F1*60+S1)
- exit /b
复制代码
不知道对不对
作者: 娜美 时间: 2023-9-12 11:24
本帖最后由 娜美 于 2023-9-12 11:27 编辑
回复 10# 77七
谢谢
哥哥的理解基本正确, 但似乎少了一种条件
如果笫2列时间符合, 如果笫3列条件也符合 但笫5列对应他们行的数值如果相同情况, 则不用输出, 不相同的数值才需要记录文件名
像下面的情况, 笫2列时间虽然符合了, 笫3列条件也符合, 但笫5列对应他们行的数值是相同的, 则不用输出
4 Jun 10, 2023 08:39:51.030724000 时间 1 4 6f89b2a23d4701b8eebabcf
6 Jun 10, 2023 08:39:51.898038000 时间 2 6 bb5c43db737f41
7 Jun 10, 2023 08:39:51.900620000 时间 3 7 6f89b2a23d4701b8eebabcf
8 Jun 10, 2023 08:39:51.900620000 时间 7 0 6f89b2a23d4701b8eebabcf0
作者: 77七 时间: 2023-9-12 11:46
回复 11# 娜美
s1和子函数的s1变量冲突导致错误,已修改。
作者: 娜美 时间: 2023-9-12 14:06
本帖最后由 娜美 于 2023-9-12 14:09 编辑
回复 12# 77七
嗯嗯, 哥哥 第3列条件只有一点点小问题, 这种情况不知道能否作出判断
第3列的数值"1" 到"3" 中间只能是 "2" 可以允许有多个"2" 连续的行, 但中间不能允许有其他数字, 否则不符合条件
例, 数值"1" 到"3" 中间 只能是"2" 但是出现了数值 "9"的行 是不符合条件的 ,
4 Jun 10, 2023 08:39:51.030724000 时间 1 4 6f89b2a23d4701b8eebabcf
6 Jun 10, 2023 08:39:51.898038000 时间 2 6 bb5c43db737f41
7 Jun 10, 2023 08:39:51.898038000 时间 9 6 bb5c43db737f41
8 Jun 10, 2023 08:39:51.900620000 时间 3 7 6f89b2a23d4701b8eebabcf
9 Jun 10, 2023 08:39:51.900620000 时间 3 7 6f89b2a23d4701b8eebabcf
作者: Five66 时间: 2023-9-12 14:50
本帖最后由 Five66 于 2023-9-12 15:58 编辑
不知道是不是这样子?保存为bat或cmd
仔细想想会覆盖非2的行,已编辑
作者: 77七 时间: 2023-9-12 15:08
回复 13# 娜美
36行下添加一行复制代码
作者: 娜美 时间: 2023-9-12 16:49
本帖最后由 娜美 于 2023-9-12 16:52 编辑
回复 15# 77七
OK 漂亮, 谢谢哥哥
作者: 娜美 时间: 2023-9-12 19:08
本帖最后由 娜美 于 2023-9-12 19:28 编辑
回复 10# 77七 - @echo off
- chcp 65001 >nul
- rem 批处理保存为utf-8编码格式
- set /a m=n=2
- set /a "Jan=1,Feb=2,Mar=3,Apr=4,May=5,Jun=6,Jul=7,Aug=8,Sep=9,Oct=10,Nov=11,Dec=12"
- for /f "delims=" %%x in ('dir /b /a-d *.txt') do (
- setlocal enabledelayedexpansion
- for /f "useback tokens=1-9* delims=,. " %%a in ("%%x") do (
- if %%h equ 1 (
- set t1=%%d-!%%b!-%%c %%e
- set t2=%%f
- set ss1=%%j
- set s2=
- ) else if %%h equ 2 (
- if defined ss1 (
- set s2=1
- )
- ) else if %%h equ 3 (
- if defined s2 (
- call :1 "!t1!" "%%d-!%%b!-%%c %%e"
- if "%%f" geq "!t2!" (
- set /a m=n-1
- )
- if !secs! leq !m! (
- if "!ss1!" neq "%%j" (
- if not defined _"%%x" (
- >>out.txt echo %%x
- set _"%%x"=1
- )
- )
- )
- set ss1=
- set s2=
- )
- ) else (
- set ss1=
- set s2=
- )
- )
- endlocal
- )
- pause
- exit
-
- :1
- ::日期时间差 code by foxjl
- set date1=%~1
- set date2=%~2
- for /f "tokens=1,2,3,4,5,6,7 delims=-/:. " %%i in ("%date1%") do ((set Y1=%%i) && (set M1=%%j) && (set D1=%%k) && (set H1=%%l) && (set F1=%%m) && (set S1=%%n) && (set MS1=%%o))
- for /f "tokens=1,2,3,4,5,6,7 delims=-/:. " %%i in ("%date2%") do ((set Y2=%%i) && (set M2=%%j) && (set D2=%%k) && (set H2=%%l) && (set F2=%%m) && (set S2=%%n) && (set MS2=%%o))
- set /a secs=((d2-32075+1461*(y2+4800+(m2-14)/12)/4+367*(m2-2-(m2-14)/12*12)/12-3*((y2+4900+(m2-14)/12)/100)/4)*86400+H2*3600+F2*60+S2)-((d1-32075+1461*(y1+4800+(m1-14)/12)/4+367*(m1-2-(m1-14)/12*12)/12-3*((y1+4900+(m1-14)/12)/100)/4)*86400+H1*3600+F1*60+S1)
- exit /b
复制代码
好奇怪, 时间计算似乎有些问题, 秒的单位如果0开头秒数, 导致时间计算条件失效, 其他数字开头的时间都准确, 唯独秒数 0开头不准确
例, 时间条件不符合,- 4 Jun 10, 2023 08:39:01.030724000 时间 1 4 6f89b2a23d4701b8eebabcf
- 6 Jun 10, 2023 08:39:05.898038000 时间 2 6 bb5c43db737f41
- 7 Jun 10, 2023 08:39:09.900620000 时间 3 7 6f89b2a23d4701b8eebabcf0
- 9 Jun 10, 2023 08:39:51.902646000 时间 9 9 1
复制代码
4 Jun 10, 2023 08:39:01.030724000 时间 1 4 6f89b2a23d4701b8eebabcf
6 Jun 10, 2023 08:39:05.898038000 时间 2 6 bb5c43db737f41
7 Jun 10, 2023 08:39:09.900620000 时间 3 7 6f89b2a23d4701b8eebabcf0
9 Jun 10, 2023 08:39:51.902646000 时间 9 9 1
作者: 77七 时间: 2023-9-12 19:43
本帖最后由 77七 于 2023-9-12 19:57 编辑
回复 17# 娜美
- call :1 "2023-6-10 08:39:01" "2023-6-10 08:39:09"
- -1
复制代码
那个函数有问题,可能“过时了”,也可能是我使用方法有问题,难道要去0?
换了一个
- @echo off
- chcp 65001 >nul
- rem 批处理保存为utf-8编码格式
- set /a m=n=2
- set /a "Jan=1,Feb=2,Mar=3,Apr=4,May=5,Jun=6,Jul=7,Aug=8,Sep=9,Oct=10,Nov=11,Dec=12"
- for /f "delims=" %%x in ('dir /b /a-d *.txt') do (
- setlocal enabledelayedexpansion
- for /f "useback tokens=1-9* delims=,. " %%a in ("%%x") do (
- if %%h equ 1 (
- set t1=%%d-!%%b!-%%c %%e
- set t2=%%f
- set ss1=%%j
- set s2=
- ) else if %%h equ 2 (
- if defined ss1 (
- set s2=1
- )
- ) else if %%h equ 3 (
- if defined s2 (
- call :1 "!t1!" "%%d-!%%b!-%%c %%e"
- if "%%f" geq "!t2!" (
- set /a m=n-1
- )
- if !DiffSecs! leq !m! (
- if "!ss1!" neq "%%j" (
- if not defined _"%%x" (
- >>out.txt echo %%x
- set _"%%x"=1
- )
- )
- )
- set ss1=
- set s2=
- )
- ) else (
- set ss1=
- set s2=
- )
- )
- endlocal
- )
- pause
- exit
-
- :1
- rem http://bbs.bathome.net/redirect.php?goto=findpost&ptid=11128&pid=70814
- set StartTime=%~1
- set EndTime=%~2
- set StartTime=%StartTime:-= %
- set StartTime=%StartTime::= %
- set EndTime=%EndTime:-= %
- set EndTime=%EndTime::= %
- call :DateToSecs %StartTime% StartSecs
- call :DateToSecs %EndTime% EndSecs
- set /a DiffSecs=EndSecs-StartSecs
- set DiffSecs=%DiffSecs:-=%
- goto :eof
-
- :DateToSecs %yy% %mm% %dd% %hh% %nn% %ss% secs
- setlocal ENABLEEXTENSIONS
- set yy=%1&set mm=%2&set dd=%3&set hh=%4&set nn=%5&set ss=%6
- if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
- set /a dd=100%dd%%%100,mm=100%mm%%%100
- set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
- set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
- if 1%hh% LSS 20 set hh=0%hh%
- if {%nn:~2,1%} EQU {p} if "%hh%" NEQ "12" set hh=1%hh%&set/a hh-=88
- if {%nn:~2,1%} EQU {a} if "%hh%" EQU "12" set hh=00
- if {%nn:~2,1%} GEQ {a} set nn=%nn:~0,2%
- set /a hh=100%hh%%%100,nn=100%nn%%%100,ss=100%ss%%%100
- set /a j=j*86400+hh*3600+nn*60+ss
- endlocal&set %7=%j%&goto :EOF
复制代码
作者: 77七 时间: 2023-9-12 20:00
果然要去0才能准确调用。
作者: 娜美 时间: 2023-9-12 21:14
回复 18# 77七
嗯嗯好了, 这个时间计算没bug 谢谢哥哥
作者: hfxiang 时间: 2023-9-13 12:04
本帖最后由 hfxiang 于 2023-9-13 13:06 编辑
回复 1# 娜美
针对1楼的样本,用第3方工具gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe )脚本可以实现。
把所有的txt文件放置于同1个文件夹内,在命令行执行如下脚本(如果写在bat文件中,须注意百分号要双重,即(%%))- gawk -F"\t+" -v"S= " "BEGIN{split(\"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec\", month, \" \");for(i=1;i<=12;i++)m_digit[month[i]]=sprintf(\"%02d\",i)}$3==1{a[1]=$0;b[1]=$5;split($2,t,\"[ ,:.]+\");t1=mktime(t[3] S m_digit[t[1]] S t[2] S t[4] S t[5] S t[6])\".\"t[7]}$3==2{if(a[1])a[2]=$0}$3==3{if(a[2]){split($2,t,\"[ ,:.]+\");t3=mktime(t[3] S m_digit[t[1]] S t[2] S t[4] S t[5] S t[6])\".\"t[7];if((b[1]!=$5)&&(t3-t1<=2)){print FILENAME;delete a;delete b;nextfile}}}$3>3{delete a;delete b}" *.txt>txt.out
复制代码
另:
1.分隔符必须是tab(楼主最后补充中的1.txt是用8个空格分隔,不符合要求)
2.gawk的版本可能对结果输出会有影响,经测试4.1.0及5.2.2能通过,而5.1.0好像不出结果;
3.运行结束后,把txt.out改成out.txt即可。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |