中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-13 02:21
中国DOS联盟论坛 » DOS学习入门 & 精彩文章 (教学室) » 字符串整理 查看 1,196 回复 5
楼 主 字符串整理 发表于 2007-10-29 19:06 ·  中国 广西 南宁 电信
初级用户
积分 20
发帖 8
注册 2007-08-01 07:48
19年会员
UID 94411
性别 男
状态 离线
有这么一个文本test.txt

202.105.205.4 1047 :Vulnerability OS:window 2003
202.106.102.122 1029 :Vulnerability 1025
OS:window 2000
202.107.35.254 1028 :Vulnerability OS:window 2000
202.106.102.195 1029 :Vulnerability 1034
OS:window 2003
202.107.209.116 1028 :Vulnerability OS:window 2003

要求整理成new.txt

202.105.205.4 1047 :Vulnerability OS:window 2003
202.106.102.122 1029 :Vulnerability OS:window 2000
202.107.35.254 1028 :Vulnerability OS:window 2000
202.106.102.195 1029 :Vulnerability OS:window 2003
202.107.209.116 1028 :Vulnerability OS:window 2003

涉及字符串的删除和两行并成一行,还可能用到字符长度判断,看了许多帖子都无法解决,哪位高手能给一个具体的方案呢?谢谢!
2 发表于 2007-10-29 20:13 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
test.awk的内容:
BEGIN{
OFS="\t";
}
{
gsub(/]]+/,"\t");
if(NF==4){
$NF="";
temps=$0;
} else {
if($1~/^OS:window/){
print temps""$0
}else{print;}
}
}


命令行执行:
gawk -f test.awk test.txt


gawk 是外部工具,在批处理室置顶贴中找。
3 发表于 2007-10-29 20:32 ·  中国 广西 南宁 电信
初级用户
积分 20
发帖 8
注册 2007-08-01 07:48
19年会员
UID 94411
性别 男
状态 离线
多谢了!
gawk链接失效了,无法测试。
能不用外部工具来实现吗。
4 发表于 2007-10-29 20:44 ·  中国 广西 南宁 电信
初级用户
积分 20
发帖 8
注册 2007-08-01 07:48
19年会员
UID 94411
性别 男
状态 离线
果然可以实现,不过如何输出到文本呢。
5 发表于 2007-10-29 21:43 ·  中国 广西 南宁 电信
初级用户
积分 20
发帖 8
注册 2007-08-01 07:48
19年会员
UID 94411
性别 男
状态 离线
有人能用纯DOS解决吗,谢谢。
6 发表于 2007-10-30 14:46 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
果然可以实现,不过如何输出到文本呢。

可以在命令后面加一个重定向就可以了。

用纯批处理也行,不过局限性很大,只针对你的范例文本。
@echo off
for /f "tokens=1-5" %%a in (test.txt) do (
if not "%%e"=="" (echo %%a %%b %%c %%d %%e) else (
if "%%a"=="OS:window" echo %%a %%b
if not "%%d"=="" set /p some=%%a %%b %%c <nul
)
)
pause
论坛跳转: