![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-11 06:55 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [求助]批处理取指定字符串后的数字? |
| 可打印版本 1,190 / 14 |
| 第1楼 elsiezhou | 发表于 2007-05-23 18:35 |
| 初级用户 发帖 13 积分 32 | |
|
[求助]批处理取指定字符串后的数字? 我有一系列txt文件如log_POTANN.txt,log_STE.txt,log_CDE.txt等等
每个log_***.txt文件的格式类似,都含有以下内容: 举例 log_POTANN.txt文件: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Table POTANN, chargé à partir de chaque enregistrement physique. xxxxxxxxxxxxxxxx Table POTANN : Chargement réussi de 206108 Lignes. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Nombre total d'enregistrements logiques ignorés : 0 Nombre total d'enregistrements logiques lus : 206108 Nombre total d'enregistrements logiques rejetés : 0 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Le début de l'exécution a été effectué sur Jeu. Avr. 26 11:38:25 2007 La fin de l'exécution a été effectuée sur Jeu. Avr. 26 11:38:34 2007 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxx处都是若干行不重要的信息 现在我需要编一个批处理,执行之后能成一个rlt1.txt文件只需要如下内容: POTANN 0 206108 0 Avr. 26 11:38:25 2007 Avr. 26 11:38:25 2007 请教高手怎么编写? 其实目的是生成rlt1.txt文件,读取一系列log文件中的指定数据。即 POTANN 0 206108 0 Avr. 26 11:38:25 2007 Avr. 26 11:38:25 2007 STE 0 55555 0 Avr. 05 11:38:25 2006 Avr. 06 11:38:25 2006 CDE 0 123569 0 Avr. 05 11:38:25 2007 Avr. 16 11:38:25 2007 ......... 再生成rlt2.txt文件,它与rlt1.txt内容一样,就是排列顺序不同,如下: POTANN02061080Avr. 26 11:38:25 2007Avr. 26 11:38:25 2007 STE0555550Avr. 05 11:38:25 2006Avr. 06 11:38:25 2006 CDE01235690Avr. 05 11:38:25 2007Avr. 16 11:38:25 2007 ......... 谢谢! |
|
| 第2楼 vkill | 发表于 2007-05-23 19:58 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
这些问题还是用 sed & awk 解决吧!
|
|
| 第3楼 lxmxn | 发表于 2007-05-23 21:08 |
| 版主 发帖 4,938 积分 11,386 | |
|
打包几个文件上来我测试吧.
|
|
| 第4楼 elsiezhou | 发表于 2007-05-24 15:27 |
| 初级用户 发帖 13 积分 32 | |
|
我不知道如何上传,这里好复杂,好像还要另外注册。我时间紧,就先把4个log的TXT文件内容copy过来。麻烦再copy到写字板。请指教!
Log_POTANN.txt SQL*Loader: Release 10.2.0.1.0 - Production on Jeu. Avr. 26 11:38:25 2007 Copyright (c) 1982, 2005, Oracle. All rights reserved. Fichier de contrôle : Z:\Controle\POTANN.ctl Fichier de données : Z:\Data\POTANN.dat Fichier BAD : Z:\Bad\Bad_POTANN.txt Fichier DISCARD : aucune spécification (Allouer tous les rebuts) Nombre à charger : ALL Nombre à sauter: 0 Erreurs permises: 0 Continuation : aucune spécification Chemin utilisé: Direct Table POTANN, chargé à partir de chaque enregistrement physique. Option d'insertion en vigueur pour cette table : TRUNCATE Nom de colonne Position Long. Séparat. Encadrem. Type de données ------------------------------ ---------- ----- ---- ---- --------------------- CODCLTETB 1:8 8 CHARACTER CODRGC 9:11 3 CHARACTER CODPRO 12:17 6 CHARACTER CODART 18:26 9 CHARACTER CODRGPPAY 27:28 2 CHARACTER CODPAY 29:31 3 CHARACTER CODDPT 32:33 2 CHARACTER CODSCTAFF 34:35 2 CHARACTER CODSCTTCH 36:37 2 CHARACTER CODPRFSTH 38:40 3 CHARACTER CODPRFINS 41:45 5 CHARACTER CODSTE 46:47 2 CHARACTER CODZONRSPCOM3 48:51 4 CHARACTER DATANNPOT 52:61 10 CHARACTER chaîne SQL pour la colonne : "to_date(:DATANNPOT,'mm-dd-yyyy')" CODCNC 62:67 6 CHARACTER TGECNC 68:85 18 CHARACTER CODTYPPROCOM1 86:89 4 CHARACTER CODTYPPROCOM2 90:93 4 CHARACTER CODTYPPROCOM3 94:97 4 CHARACTER CODZONRSPCOM2 98:101 4 CHARACTER CODZONRSPCOM1 102:105 4 CHARACTER CODENT 106:109 4 CHARACTER CODZONRSPGRP3 110:113 4 CHARACTER CODZONRSPGRP2 114:117 4 CHARACTER CODZONRSPGRP1 118:121 4 CHARACTER Le ou les index suivants, dans la table POTANN, ont été traités : index ROQUETTE.PK_POTANN rendu inutilisable pour la raison suivante : ORA-01452: CREATE UNIQUE INDEX impossible ; il existe des doublons Table POTANN : Chargement réussi de 206108 Lignes. 0 Lignes chargement impossible dû à des erreurs de données. 0 Lignes chargement impossible car échec de toutes les clauses WHEN. 0 Lignes chargement impossible car tous les champs étaient non renseignés. Taille du tableau de liens non utilisée dans le chemin direct. Lignes de tableau de colonnes : 5000 Octets de tampon de flux de données : 256000 Octets de tampon de lecture : 1048576 Nombre total d'enregistrements logiques ignorés : 0 Nombre total d'enregistrements logiques lus : 206108 Nombre total d'enregistrements logiques rejetés : 0 Nombre total d'enregistrements logiques mis au rebut : 0 Nombre total de tampons de flux de données chargés par le thread principal de SQL*Loader : 54 Nombre total de tampons de flux de données chargés par le thread de chargement de SQL*Loader : 81 Le début de l'exécution a été effectué sur Jeu. Avr. 26 11:38:25 2007 La fin de l'exécution a été effectuée sur Jeu. Avr. 26 11:38:34 2007 Temps écoulé (ELAPSED) : 00:00:09.33 Temps processeur (CPU) : 00:00:02.06 —————————————————————————————————————— Log_AGN.txt SQL*Loader: Release 10.2.0.1.0 - Production on Mer. Avr. 18 10:19:14 2007 Copyright (c) 1982, 2005, Oracle. All rights reserved. Fichier de contrôle : Z:\Controle\AGN.ctl Fichier de données : Z:\Data\AGN.dat Fichier BAD : Z:\Bad\Bad_AGN.txt Fichier DISCARD : aucune spécification (Allouer tous les rebuts) Nombre à charger : ALL Nombre à sauter: 0 Erreurs permises: 0 Continuation : aucune spécification Chemin utilisé: Direct Table AGN, chargé à partir de chaque enregistrement physique. Option d'insertion en vigueur pour cette table : TRUNCATE Nom de colonne Position Long. Séparat. Encadrem. Type de données ------------------------------ ---------- ----- ---- ---- --------------------- CODAGN 1:3 3 CHARACTER chaîne SQL pour la colonne : "decode(:CODAGN,null,' ',:CODAGN)" LIBAGN 4:23 20 CHARACTER Le ou les index suivants, dans la table AGN, ont été traités : index ROQUETTE.PK_AGN chargé correctement avec 1211 clés Table AGN : Chargement réussi de 1211 Lignes. 0 Lignes chargement impossible dû à des erreurs de données. 0 Lignes chargement impossible car échec de toutes les clauses WHEN. 0 Lignes chargement impossible car tous les champs étaient non renseignés. Taille du tableau de liens non utilisée dans le chemin direct. Lignes de tableau de colonnes : 5000 Octets de tampon de flux de données : 256000 Octets de tampon de lecture : 1048576 Nombre total d'enregistrements logiques ignorés : 0 Nombre total d'enregistrements logiques lus : 1211 Nombre total d'enregistrements logiques rejetés : 0 Nombre total d'enregistrements logiques mis au rebut : 0 Nombre total de tampons de flux de données chargés par le thread principal de SQL*Loader : 1 Nombre total de tampons de flux de données chargés par le thread de chargement de SQL*Loader : 0 Le début de l'exécution a été effectué sur Mer. Avr. 18 10:19:14 2007 La fin de l'exécution a été effectuée sur Mer. Avr. 18 10:19:15 2007 Temps écoulé (ELAPSED) : 00:00:00.25 Temps processeur (CPU) : 00:00:00.11 —————————————————————————————————————— Log_ANN.txt SQL*Loader: Release 10.2.0.1.0 - Production on Mer. Avr. 18 09:53:38 2007 Copyright (c) 1982, 2005, Oracle. All rights reserved. Fichier de contrôle : Z:\Controle\ANN.ctl Fichier de données : Z:\Data\ANN.dat Fichier BAD : Z:\Bad\Bad_ANN.txt Fichier DISCARD : aucune spécification (Allouer tous les rebuts) Nombre à charger : ALL Nombre à sauter: 0 Erreurs permises: 0 Continuation : aucune spécification Chemin utilisé: Direct Table ANN, chargé à partir de chaque enregistrement physique. Option d'insertion en vigueur pour cette table : TRUNCATE Nom de colonne Position Long. Séparat. Encadrem. Type de données ------------------------------ ---------- ----- ---- ---- --------------------- CODANN 1:4 4 CHARACTER Le ou les index suivants, dans la table ANN, ont été traités : index ROQUETTE.PK_ANN chargé correctement avec 22 clés Table ANN : Chargement réussi de 22 Lignes. 0 Lignes chargement impossible dû à des erreurs de données. 0 Lignes chargement impossible car échec de toutes les clauses WHEN. 0 Lignes chargement impossible car tous les champs étaient non renseignés. Taille du tableau de liens non utilisée dans le chemin direct. Lignes de tableau de colonnes : 5000 Octets de tampon de flux de données : 256000 Octets de tampon de lecture : 1048576 Nombre total d'enregistrements logiques ignorés : 0 Nombre total d'enregistrements logiques lus : 22 Nombre total d'enregistrements logiques rejetés : 0 Nombre total d'enregistrements logiques mis au rebut : 0 Nombre total de tampons de flux de données chargés par le thread principal de SQL*Loader : 1 Nombre total de tampons de flux de données chargés par le thread de chargement de SQL*Loader : 0 Le début de l'exécution a été effectué sur Mer. Avr. 18 09:53:38 2007 La fin de l'exécution a été effectuée sur Mer. Avr. 18 09:53:38 2007 Temps écoulé (ELAPSED) : 00:00:00.23 Temps processeur (CPU) : 00:00:00.16 —————————————————————————————————————— Log_BUDNVDANN.txt SQL*Loader: Release 10.2.0.1.0 - Production on Mer. Avr. 18 09:54:09 2007 Copyright (c) 1982, 2005, Oracle. All rights reserved. Fichier de contrôle : Z:\Controle\BUDNVDANN.ctl Fichier de données : Z:\Data\BUDNVDANN.dat Fichier BAD : Z:\Bad\Bad_BUDNVDANN.txt Fichier DISCARD : aucune spécification (Allouer tous les rebuts) Nombre à charger : ALL Nombre à sauter: 0 Erreurs permises: 0 Continuation : aucune spécification Chemin utilisé: Direct Table BUDNVDANN, chargé à partir de chaque enregistrement physique. Option d'insertion en vigueur pour cette table : TRUNCATE Nom de colonne Position Long. Séparat. Encadrem. Type de données ------------------------------ ---------- ----- ---- ---- --------------------- CODRGC 1:3 3 CHARACTER chaîne SQL pour la colonne : "decode(:CODRGC,null,' ',:CODRGC)" CODPRO 4:9 6 CHARACTER chaîne SQL pour la colonne : "decode(:CODPRO,null,' ',:CODPRO)" CODART 10:18 9 CHARACTER chaîne SQL pour la colonne : "decode(:CODART,null,' ',:CODART)" CODRGPPAY 19:20 2 CHARACTER chaîne SQL pour la colonne : "decode(:CODRGPPAY,null,' ',:CODRGPPAY)" CODPAY 21:23 3 CHARACTER chaîne SQL pour la colonne : "decode(:CODPAY,null,' ',:CODPAY)" CODDPT 24:25 2 CHARACTER chaîne SQL pour la colonne : "decode(:CODDPT,null,' ',:CODDPT)" CODSCTAFF 26:27 2 CHARACTER chaîne SQL pour la colonne : "decode(:CODSCTAFF,null,' ',:CODSCTAFF)" CODSCTTCH 28:29 2 CHARACTER chaîne SQL pour la colonne : "decode(:CODSCTTCH,null,' ',:CODSCTTCH)" CODPRFSTH 30:32 3 CHARACTER chaîne SQL pour la colonne : "decode(:CODPRFSTH,null,' ',:CODPRFSTH)" CODPRFINS 33:37 5 CHARACTER chaîne SQL pour la colonne : "decode(:CODPRFINS,null,' ',:CODPRFINS)" CODSTE 38:39 2 CHARACTER chaîne SQL pour la colonne : "decode(:CODSTE,null,' ',:CODSTE)" CODZONRSPCOM3 40:43 4 CHARACTER chaîne SQL pour la colonne : "decode(:CODZONRSPCOM3,null,' ',:CODZONRSPCOM3)" DATANNBUDNVD 44:53 10 CHARACTER chaîne SQL pour la colonne : "to_date(:DATANNBUDNVD,'mm-dd-yyyy')" CODCENPRD 54:54 1 CHARACTER chaîne SQL pour la colonne : "decode(:CODCENPRD,null,' ',:CODCENPRD)" TGEBUDNVD 55:72 18 CHARACTER CODTYPPROCOM1 73:76 4 CHARACTER chaîne SQL pour la colonne : "decode(:CODTYPPROCOM1,null,' ',:CODTYPPROCOM1)" CODTYPPROCOM2 77:80 4 CHARACTER chaîne SQL pour la colonne : "decode(:CODTYPPROCOM2,null,' ',:CODTYPPROCOM2)" CODTYPPROCOM3 81:84 4 CHARACTER chaîne SQL pour la colonne : "decode(:CODTYPPROCOM3,null,' ',:CODTYPPROCOM3)" CODZONRSPCOM2 85:88 4 CHARACTER chaîne SQL pour la colonne : "decode(:CODZONRSPCOM2,null,' ',:CODZONRSPCOM2)" CODZONRSPCOM1 89:92 4 CHARACTER chaîne SQL pour la colonne : "decode(:CODZONRSPCOM1,null,' ',:CODZONRSPCOM1)" CODENT 93:96 4 CHARACTER chaîne SQL pour la colonne : "decode(:CODENT,null,' ',:CODENT)" Le ou les index suivants, dans la table BUDNVDANN, ont été traités : index ROQUETTE.PK_BUDNVDANN chargé correctement avec 94 clés Table BUDNVDANN : Chargement réussi de 94 Lignes. 0 Lignes chargement impossible dû à des erreurs de données. 0 Lignes chargement impossible car échec de toutes les clauses WHEN. 0 Lignes chargement impossible car tous les champs étaient non renseignés. Taille du tableau de liens non utilisée dans le chemin direct. Lignes de tableau de colonnes : 5000 Octets de tampon de flux de données : 256000 Octets de tampon de lecture : 1048576 Nombre total d'enregistrements logiques ignorés : 0 Nombre total d'enregistrements logiques lus : 94 Nombre total d'enregistrements logiques rejetés : 0 Nombre total d'enregistrements logiques mis au rebut : 0 Nombre total de tampons de flux de données chargés par le thread principal de SQL*Loader : 1 Nombre total de tampons de flux de données chargés par le thread de chargement de SQL*Loader : 0 Le début de l'exécution a été effectué sur Mer. Avr. 18 09:54:09 2007 La fin de l'exécution a été effectuée sur Mer. Avr. 18 09:54:09 2007 Temps écoulé (ELAPSED) : 00:00:00.59 Temps processeur (CPU) : 00:00:00.13 [ Last edited by elsiezhou on 2007-5-24 at 03:34 PM ] |
|
| 第5楼 elsiezhou | 发表于 2007-05-24 15:58 |
| 初级用户 发帖 13 积分 32 | |
|
这4个log批处理以后生成rlt1.txt文件内容格式如下:
POTANN 206108 0 206108 0 26/04/200711:38:25 26/04/200711:38:34 AGN 1211 0 1211 0 18/04/200710:19:14 18/04/200710:19:15 ANN 22 0 22 0 18/04/200718 09:53:38 18/04/200718 09:53:38 BUDNVDANN 94 0 94 0 18/04/200709:54:09 18/04/200709:54:09 生成rlt2.txt文件内容同rlt1.txt而格式如下: POTANN2061080206108026/04/200711:38:2526/04/200711:38:34 AGN121101211018/04/200710:19:1418/04/200710:19:15 ANN22022018/04/200718 09:53:3818/04/200718 09:53:38 BUDNVDANN94094018/04/200709:54:0918/04/200709:54:09 |
|
| 第6楼 elsiezhou | 发表于 2007-05-24 16:32 |
| 初级用户 发帖 13 积分 32 | |
|
其实我用了批命令提取log中相关重要的行
for %%A in (POTANN AGN ANN BUDNVDANN) do ( findstr /C:"Table" c:\Log_%%A.txt >>c:\rlt_log.txt findstr /C:"Chargement réussi" c:\Log_%%A.txt >>c:\rlt_log.txt findstr /C:"Nombre total d'enregistrements logiques ignorés" c:\Log_%%A.txt >>c:\rlt_log.txt findstr /C:"Nombre total d'enregistrements logiques lus" c:\Log_%%A.txt >>c:\rlt_log.txt findstr /C:"Nombre total d'enregistrements logiques rejetés" c:\Log_%%A.txt >>c:\rlt_log.txt findstr /C:"Le début de l'exécution" c:\Log_%%A.txt >>c:\rlt_log.txt findstr /C:"La fin de l'exécution" c:\Log_%%A.txt >>c:\rlt_log.txt ) 生成的rlt_log.txt内容如下: Table POTANN, chargé à partir de chaque enregistrement physique. Table POTANN : Chargement réussi de 206108 Lignes. Nombre total d'enregistrements logiques ignorés : 0 Nombre total d'enregistrements logiques lus : 206108 Nombre total d'enregistrements logiques rejetés : 0 Le début de l'exécution a été effectué sur Jeu. Avr. 26 11:38:25 2007 La fin de l'exécution a été effectuée sur Jeu. Avr. 26 11:38:34 2007 Table AGN, chargé à partir de chaque enregistrement physique. Table AGN : Chargement réussi de 1211 Lignes. Nombre total d'enregistrements logiques ignorés : 0 Nombre total d'enregistrements logiques lus : 1211 Nombre total d'enregistrements logiques rejetés : 0 Le début de l'exécution a été effectué sur Mer. Avr. 18 10:19:14 2007 La fin de l'exécution a été effectuée sur Mer. Avr. 18 10:19:15 2007 Table ANN, chargé à partir de chaque enregistrement physique. Table ANN : Chargement réussi de 22 Lignes. Nombre total d'enregistrements logiques ignorés : 0 Nombre total d'enregistrements logiques lus : 22 Nombre total d'enregistrements logiques rejetés : 0 Le début de l'exécution a été effectué sur Mer. Avr. 18 09:53:38 2007 La fin de l'exécution a été effectuée sur Mer. Avr. 18 09:53:38 2007 Table BUDNVDANN, chargé à partir de chaque enregistrement physique. Table BUDNVDANN : Chargement réussi de 94 Lignes. Nombre total d'enregistrements logiques ignorés : 0 Nombre total d'enregistrements logiques lus : 94 Nombre total d'enregistrements logiques rejetés : 0 Le début de l'exécution a été effectué sur Mer. Avr. 18 09:54:09 2007 La fin de l'exécution a été effectuée sur Mer. Avr. 18 09:54:09 2007 现在就是如何从中提取数字和日期如上楼所示? |
|
| 第7楼 elsiezhou | 发表于 2007-05-25 15:23 |
| 初级用户 发帖 13 积分 32 | |
|
sed & awk 这2个命令好像都是在UNIX下的,我在WINDOWS下也能用吗?
|
|
| 第8楼 lxmxn | 发表于 2007-05-25 16:55 |
| 版主 发帖 4,938 积分 11,386 | |
|
Re elsiezhou:
由于某些原因,两天没有登录论坛,没有即时回复你的帖子,抱歉。 sed & awk 在Windows下面也可以用的。呆会把我处理的结果发出来。 |
|
| 第9楼 lxmxn | 发表于 2007-05-25 17:47 |
| 版主 发帖 4,938 积分 11,386 | |
|
Re elsiezhou:
我主要是用的gawk来完成的,为了处理方便,直接用rlt_log.txt文件的内容了。 首先看awk1.awk脚本的内容: 然后在命令行执行 生成rlt1.txt文件,再来根据rlt1.txt文件得到rlt2.txt文件。 命令行执行就得到了rlt2.txt了。 |
|
| 第10楼 elsiezhou | 发表于 2007-05-25 20:04 |
| 初级用户 发帖 13 积分 32 | |
|
先谢谢了!
我试验了一下。 我把 { if($0~/Table .* :/)print $2 if($0~/Chargement.*[0-9]*/)print $(NF-1) if($0~/^Nombre.*/)print $NF if($0~/^L.*:.*:.*[0-9]*/)printf("%s/04/%s%s\n",$(NF-2),$NF,$(NF-1)) } 保存为awk1.awk 之后我把 gawk -f awk1.awk rlt_log.txt>rlt1.txt 保存为cmd1.bat 运行之后,rlt1.txt是空的文件。我不知道为什么?哪里有错指教。 |
|
| 第11楼 elsiezhou | 发表于 2007-05-25 20:48 |
| 初级用户 发帖 13 积分 32 | |
|
gawk命令在windows下能用妈?不用装什么东西吧?
我原是想想测试成功,之后好好研究gawk命令的使用,以期看懂上述批命令。 不论如何,非常感谢帮忙! |
|
| 第12楼 lxmxn | 发表于 2007-05-25 20:50 |
| 版主 发帖 4,938 积分 11,386 | |
|
Re elsiezhou:
按照我的步骤来吧,在命令行执行。在批处理里面执行有时会出现一些异常的情况,原因未知。 |
|
| 第13楼 lxmxn | 发表于 2007-05-25 20:51 |
| 版主 发帖 4,938 积分 11,386 | |
|
我说过,在windows下是可以用的。
|
|
| 第14楼 yiflying | 发表于 2009-01-21 18:00 |
| 社区乞丐 发帖 4 积分 -18 | |
|
很期待啊,我也经常需要这个功能的哦
|
|
| 第15楼 netbenton | 发表于 2009-01-22 11:03 |
| 银牌会员 发帖 752 积分 1,916 来自 广西 | |
|
纯批的完成了 @echo off
for /r %%a in (log_*.txt) do ( set n=0 echo.%%~fa setlocal enabledelayedexpansion for /f "tokens=* delims=," %%c in ('findstr ".*" %%~fa') do ( set str=%%c set str=!str:"=! call :sub !str! ) for /f "tokens=2 delims=#" %%h in ('set _var') do set/p=%%h<nul echo. endlocal ) pause goto :eof :sub :loop set /a n+=1 if "%1%3"=="Table:" set _var!n!=#%2 if "%1%2"=="ignorés:" set _var!n!=#%3 if "%1%2"=="rejetés:" set _var!n!=#%3 if "%1%2"=="lus:" set _var!n!=#%3 if "%1%3"=="surAvr." set _var!n!=#%3 %4 %5 %6 shift if defined _var%n% goto :eof if not "%3"=="" goto :loop goto :eof |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |