![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-07 09:23 |
共 48,040 主题排行 / 350,125 发帖 / 今日 0 篇 / 48,252 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 请教:关于利用AWK处理硬盘分区信息的初级应用 |
| 可打印版本 881 / 11 |
| 第1楼 lianjiang2004 | 发表于 2008-01-27 21:38 |
| 金牌会员 发帖 1,884 积分 3,946 | |
|
请教:关于利用AWK处理硬盘分区信息的初级应用 请教:关于利用AWK处理硬盘分区信息的初级应用
看了awk的介绍,感觉功能强大,用于实dos下处理硬盘分区信息,应该比单纯使用strings处理,能大幅度简化代码。 可是在使用中遇到些问题,望能得到高人指点。 比如以下的信息,如何剔除指定硬盘以外的分区信息?【如去掉第二硬盘】 还有就是如何保留带有盘符的分区信息?【如保留1.1:和1.3:】 试了以下方法通不过。 awk '$1 ~ /1./ {print $1}' hdinfo.ini 原因应该是当成了数字处理,而不是字符。给1.加上引号也不行。 awk '/:\/ {print $1}' hdinfo.ini 估计是:、\等有特定含义,也没当成字符处理。 是字符串的话是可以的。比如活动分区: awk '{FS=":"}; /Active/ {print $1}' hdinfo.ini 不知有何办法处理。谢谢。 Disk: 1 (18.63GB) M: S: 1.1: ( 4.89GB) Active Volume FAT32 1.2: ( 5.86GB) Volume NTFS l: 1.3: ( 7.88GB) Volume FAT32 l: Disk: 2 (974.25MB) M: ( 123KB) Unused Space 2.1: ( 974.13MB) Volume FAT16 l: |
|
| 第2楼 fastslz | 发表于 2008-01-27 22:05 |
| 铂金会员 发帖 2,315 积分 5,493 来自 上海 | |
|
分区数不固定的话很难筛选的
|
|
| 第3楼 lianjiang2004 | 发表于 2008-01-27 22:45 |
| 金牌会员 发帖 1,884 积分 3,946 | |
|
两个问题通过曲线救国的办法已解决。
如何使用“:””\“""之类的符号问题仍未解决。 看来只能自己慢慢摸索了。 [ Last edited by lianjiang2004 on 2008-1-29 at 01:31 PM ] |
|
| 第4楼 junchen2 | 发表于 2008-01-28 00:34 |
| 高级用户 发帖 219 积分 537 来自 杭州--半山 | |
|
C:\Documents and Settings\wjc\桌面>awk -F"." "{if($1 ==1&&$0~/ \[[A-Z]:\\\] /){p
rint $0}}" hdinfo.ini 1.1: ( 4.89GB) [C:\] Active Volume FAT32 1.3: ( 7.88GB) [D:\] Volume FAT32 l:[DATA] 没有太看清你的要求。不知道是不是象这样 |
|
| 第5楼 lianjiang2004 | 发表于 2008-01-28 09:26 |
| 金牌会员 发帖 1,884 积分 3,946 | |
|
ok,我研究一下你的代码,有问题再请教。
|
|
| 第6楼 lianjiang2004 | 发表于 2008-01-28 10:03 |
| 金牌会员 发帖 1,884 积分 3,946 | |
|
楼上的代码windows下用gawk测试通过,可是dos下运行出错。
估计是所用版本较旧的原因。 网上找了很久,找到的都是windows下运行的gawk,dos下运行的很难找。 后来还是在我一前下载的一个软件包里找到了一个dos版的。 能否提供个dos下能用的gawk? 我试了以下两种都通不过。 awk ' /\[A-Z]:/ {print}' hdinfo.ini 和 awk ' /\\\] / {print}' hdinfo.ini |
|
| 第7楼 lianjiang2004 | 发表于 2008-01-29 13:31 |
| 金牌会员 发帖 1,884 积分 3,946 | |
|
如何使用“:””\“"[""]"之类的符号问题仍未解决。
看来只能自己慢慢摸索了。 |
|
| 第8楼 abcd | 发表于 2008-01-29 13:51 |
| 银牌会员 发帖 739 积分 1,436 | |
|
特殊字符用\转义
楼主的正则还需要加强啊 @echo off gawk "$0~/:\\/ {print}" hdinfo.ini pause |
|
| 第9楼 lianjiang2004 | 发表于 2008-01-29 14:35 |
| 金牌会员 发帖 1,884 积分 3,946 | |
|
谢谢指教。
确实了解太少。 不知为何 awk ' /\\\] / {print}' hdinfo.ini 通不过。 应该已对"\]" 进行了转义。 估计也于awk版本有关。 |
|
| 第10楼 abcd | 发表于 2008-01-29 20:07 |
| 银牌会员 发帖 739 积分 1,436 | |
|
awk ' /\\\] / {print}' hdinfo.ini
这里转义是没有错误的,错就错在楼主使用了单引号,而非双引号 应该是楼主看帮助不是很仔细,单引号是用于linux、unix等系统的 在dos下是用双引号的 |
|
| 第11楼 lianjiang2004 | 发表于 2008-01-29 20:26 |
| 金牌会员 发帖 1,884 积分 3,946 | |
|
我用的dos版awk版本就是用单引号的。
1楼说了 是字符串的话是可以的。比如活动分区: awk '{FS=":"}; /Active/ {print $1}' hdinfo.ini 这是能获得正确结果的。 |
|
| 第12楼 lianjiang2004 | 发表于 2008-01-29 20:31 |
| 金牌会员 发帖 1,884 积分 3,946 | |
|
该版本awk似乎不支持\转义,也不支持类似 [A-Z]:的用法。
今天已找到了一个dos版gawk,问题基本解决了。 也是用单引号的。 如: gawk '/\[[A-Z]:\\\]/ {print $0}' hdinfo.ini |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |