中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 字符串整理 上一主题 | 下一主题
drsh
初级用户





积分 20
发帖 8
注册 2007-8-1
状态 离线
『楼 主』:  字符串整理

有这么一个文本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

涉及字符串的删除和两行并成一行,还可能用到字符长度判断,看了许多帖子都无法解决,哪位高手能给一个具体的方案呢?谢谢!

2007-10-29 19:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 2 楼』:  

test.awk的内容:
BEGIN{
    OFS="\t";
}
{
    gsub(/[[:space:]][[:space:]]+/,"\t");
    if(NF==4){
        $NF="";
        temps=$0;
    } else {
        if($1~/^OS:window/){
            print temps""$0
        }else{print;}
    }
}
命令行执行:
gawk -f test.awk test.txt
gawk 是外部工具,在批处理室置顶贴中找。

2007-10-29 20:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
drsh
初级用户





积分 20
发帖 8
注册 2007-8-1
状态 离线
『第 3 楼』:  

多谢了!
gawk链接失效了,无法测试。
能不用外部工具来实现吗。

2007-10-29 20:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
drsh
初级用户





积分 20
发帖 8
注册 2007-8-1
状态 离线
『第 4 楼』:  

果然可以实现,不过如何输出到文本呢。

2007-10-29 20:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
drsh
初级用户





积分 20
发帖 8
注册 2007-8-1
状态 离线
『第 5 楼』:  

有人能用纯DOS解决吗,谢谢。

2007-10-29 21:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 6 楼』:  



  Quote:
果然可以实现,不过如何输出到文本呢。

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

用纯批处理也行,不过局限性很大,只针对你的范例文本。
@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


2007-10-30 14:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: