无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 28941|回复: 68
打印 上一主题 下一主题

awk for dos 的简单应用(awk实例)

[复制链接]
跳转到指定楼层
1#
发表于 2010-1-8 08:54:33 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
awk for dos 是用于在dos下处理文本文件或者文本流的工具软件.
awk的语法:
awk '筛选条件 {命令1;命令2;命令3.....}' 文本文件名
其中"筛选条件"和{}不能同时缺省.
举例:
disk1.txt的内容,通过gdisk 1 >disk1.txt 获得
Disk  Partitions  Cylinders  Heads  Sectors  Mbytes  Model
  1        6         5169     240      63   38166.7  ST340016A
Partition  Status   Type     Volume Label   Mbytes   System   Usage
C:  1        A    PRIMARY                  8809.0  FAT32      23%
     2             EXTENDED                26686.1             70%
D:  3             LOGICAL                 10919.1  FAT32      29%
     4             LOGICAL                  9985.7  NTFS/HPFS  26%
E:  5             LOGICAL                  5781.2  FAT32      15%
     6             PRIMARY    RESTORE       2666.6  DIAGNOSTIC  7%

一、逐行显示 disk1.txt 中的内容
命令1:type disk1.txt|awk '{print $0}'
用type命令把disk1.txt显示给awk处理(更流行的说法是:用type命令把disk1.txt以一个
文本流的方式传递给awk),awk把传递过来的文本流进行分析处理逐行输出.
另一种简单的写法:
命令2:awk '{print $0}' disk1.txt
用awk直接处理disk1.txt,逐行显示
这里只是举例说明awk对文本文件和文本流的处理.
其实要达到这个逐行显示的目的只需要type disk1.txt 就可以了.
二、显示ghost用的全部分区编号\类型\百分比
awk '/LOG/;/PRI/' DISK1.TXT|AWK '{N+=1;print "1:"N,substr($0,20,3),substr($0,64,4)}'
命令包含一个管道"|",执行两个awk命令。
1.awk分析disk1.txt 内容,筛选出包含"LOG"和"PRI"的行输出
2.用awk逐行处理 "|" 传送过来的文本流,每处理一行n就增加1,同时显示"1:"和n的值,
以及该行第20,21,22三个位置的字符,该行第64,65,66,67四个位置的字符.

三、获得ghost用的最后一个硬盘分区编号
命令1.  awk '/LOG/;/PRI/' DISK1.TXT|AWK '{N+=1} END {print "1:"N}'
命令2.  awk '/LOG/;/PRI/' DISK1.TXT|AWK 'END {print "1:"FNR}'
awk分析disk1.txt 内容,筛选出包含"LOG"和"PRI"的行输出;用awk逐行处理 "|" 传送过来的文本流,最后显示"1:"和文本流总行数.


四、获得ghost用的最后一个主引导分区编号
awk '/LOG/;/PRI/' DISK1.TXT|AWK '{N+=1;print "1:"N,substr($0,20,3)}'|awk '/PRI/ {p=$1} END {print p}'

五、关于\ 和 [
awk 不能通过 print 输出"[" ,但是可以通过 printf "%%c%,91 的方式输出"[",也就是用printf以ASCII码的方式输出字符,这样我们就可以用AWK 生成 WBAT需要的菜单了。具体例子看 13 楼
ghost命令中有用到 "\",而,AWK 也不能通过 print 输出 "\",但,我们可以用同样方法输出成一个ghost命令到bat,然后运行这个bat。
比如:
gdisk 1|awk '/PRIMARY/;/LOGICA/' |AWK 'END {printf "ghost -clone,mode pdump,src=1:1,dst=1:"FNR":";printf "%%c",92;printf "System.gho -z5 -fx -sure"}'>G.BAT
得到的 G.BAT 就是你所需要的脚本。g.bat用于让ghost把镜像备份到最后一个分区。
就是用awk 分析gdisk 得到的第一硬盘分区信息并获得分区总个数,并生成对应的备份脚本g.bat。
其中 "FNR" 是AWK内置变量,用于表示文本流的总行数。

六、awk 的脚本支持(没有简单编程基础的可以不看)
对于比较复杂的awk调用,为了减少单行命令长度往往需要脚本的支持,就像dos下调用多个dos命令的时候我们常常编辑bat脚本一样。
语法: awk -f 脚本名 文本文件名  
比如:awk -f lastp.awk disk1.txt 表示用awk 调用脚本 lastp.awk 分析文本文件disk1.txt。
lastp.awk 内容如下:
BEGIN {print "获取硬盘有效分区信息及最后分区编号"}
{
if (substr($0,20,3)=="LOG") par($0);
if (substr($0,20,3)=="PRI") par($0)
}
END {print "";print "The last partition is 1:"n}


function par(partition) {
n+=1;print "1:"n,partition
}

脚本包括一个主程序和一个function(函数),功能是:显示disk1.txt 中的所有逻辑分区和主引导分区,并最终得出最后一个用于ghost的分区编号。
函数 par 的作用:接收一个变量(partition),每运行一次 par 函数就把全局变量 n 增加1,同时显示 "1:" 和n的值,以及显示接收过来的变量 partition 的内容;

主程序的作用:逐行分析文本流内容,如果该行的第20,21,22三个字符为"LOG"或者"PRI" 都要调用一次 PAR 函数,最后显示 "The last partition is 1:" 以及全局变量n 的值。
七、复杂一些的脚本
运行如下两句话实现格式化第一硬盘中c:盘以外的所有分区包括ntfs分区
gdisk 1|awk -f gdf.awk
gdisk 1 /batch:gdf.txt
-----gdf.awk---负责生成一个供gdisk调用的脚本
BEGIN {system("echo.>gdf.txt")}
{
if ($1!="C:") {
    if (substr($0,20,3)=="PRI") gdf("PRI")
    if (substr($0,20,3)=="LOG") gdf("LOG")
}
}
END {}

function gdf(p) {
        if (substr($0,5,1)==" ") {n=substr($0,6,1)} else {n=substr($0,5,2)}
        if (index($(NF-1),"NTFS")!=0)  {NTFS="/NTFS"} else {NTFS=""}
        system("echo /del /p:"n" /y >>gdf.txt" )
        system("echo /cre /"p" /for /q "NTFS" /y >>gdf.txt" )
        if (substr($0,15,1)=="A")  system("echo /act /p:"n" /y >>gdf.txt")
        }

-----------------------
1.把运行 "gdisk 1“ 获取的第一硬盘分区信息以文本流方式传递给awk , awk调用脚本文件gdf.awk对传递过来的文本流进行分析,生成gdf.txt 文件用与gdisk调用。gdf.txt 包含了逐一删除、创建、格式化、激活各个分区的gdisk指令。
2、gdisk 调用gdf.txt 对第一硬盘各分区进行格式化处理。
awk脚本解说看12楼

八、纯dos下实现 身份证号码所在地查询 具体看 16 楼

九、http://bbs.wuyou.net/forum.php?mod=viewthread&tid=158648&page=7#pid2025840 关于同时处理多个文件的尝试,用 GETLINE


AWK学习资料 awk_cai.rar (89.78 KB, 下载次数: 643)
awk.rar (32.38 KB, 下载次数: 714) AWK FOR DOS
gawk.rar (86.97 KB)  FOR DOS

[ 本帖最后由 dos时代菜鸟 于 2010-8-24 12:54 编辑 ]
推荐
发表于 2010-3-30 14:52:55 | 只看该作者
原帖由 dos时代菜鸟 于 2010-3-30 14:15 发表

1、nset 在win2000 下同样可以用。
2、可以用 gawk 的print 生成一个包含 SET 命令的 CMD 脚本,然后运行该脚本。


gawk for dos    '....{printf "....."$1}' ....

gawk for win    ".....{printf ?....?$1}".....   请赐教
回复

使用道具 举报

68#
 楼主| 发表于 2011-9-22 09:13:00 | 只看该作者
可以通过 awk 自动 生成一个 bat 脚本,调用 wbat 指令 ,通过 wbat窗口交给用户选择。

可以参考 本贴 13#
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=158648&page=2#pid1866305

[ 本帖最后由 dos时代菜鸟 于 2011-9-22 09:14 编辑 ]
回复

使用道具 举报

67#
发表于 2011-9-22 01:04:09 | 只看该作者
ghost -clone,mode pdump,src=1:1,dst=1:"FNR"

如果是从U盘启动,dst=2:1 ,因为U盘被当成第一个盘,请问DOS下怎么判断硬盘被当成第几块磁盘?

点评

苍穹龙骑www.wbiquge.com/0_991/ 儒道至圣www.gmwxw.com/0_616/  发表于 2014-11-5 14:07
回复

使用道具 举报

66#
 楼主| 发表于 2010-11-29 08:54:03 | 只看该作者
原帖由 快雪时晴 于 2010-11-28 23:46 发表
编码规范很重要,特别是注释,一定不能嫌麻烦,隔段时间看自己的代码,经常都会半天云里雾里

awk不错,命令行下的文本输入输出处理特别给力


要想忽略 ini 文件中被  ";" 注释掉的 内容 只需要在 load() 中加入 && substr($1,0,1)!=";"
回复

使用道具 举报

65#
发表于 2010-11-28 23:46:43 | 只看该作者
编码规范很重要,特别是注释,一定不能嫌麻烦,隔段时间看自己的代码,经常都会半天云里雾里

awk不错,命令行下的文本输入输出处理特别给力
回复

使用道具 举报

64#
 楼主| 发表于 2010-11-28 17:30:15 | 只看该作者
用awk 编辑脚本 完成 inifile 的功能,据说inifile 有*.ini 文件大小限制。

inifile.bat 地用法:可以读取/修改/添加 特定项目组中特定项目的数值。
%1 the option:read/edit/append ; 命令参数:读取,改写,添加
%2 the ini_file                ; ini文件名字
%3 the [TOP] in ini_file       ; ini文件中项目组的名字
%4 the item's name in ini_file ; 子项目的名字
%5 the item' value in ini_file ; 子项目的数值
%6 the out_to file             ; 信息输出文件.
如果不指定%6 ,结果将放入initemp.txt 中.
如果指令为修改/添加 ,那么initemp.txt 中将是修改好的整个ini文件的内容
如果指令为读取      ,那么initemp.txt 中将保存读取的子项目对应的数值
awk.exe/inifile.bat/inifile.awk/%2 必须在同一个文件夹中.因为这个版本的 awk 不能处理 带"\"的语句.
之所以用这个版本的awk 是因为这个版本占用内存小,速度快.

inifile.bat 内容:
@ECHO OFF
if not exist %2 goto error2

set outfile=%6
if %6*==* set outfile=initemp.txt
AWK -f inifile.awk -F= -v option=%1 top=%3 item=%4 value=%5 %2 >%outfile%
goto end

:error2
echo The file %2 is not exist!

:END
set outfile=

inifile.awk 的内容
BEGIN {
/* print "option="option,"top="top,"item="item,"value="value */
}
{
load()
if (toupper(option)=="READ")   { if (topx==1 && itemx==1) {print $2} }
if (toupper(option)=="EDIT")   { if (topx==1 && itemx==1) {print x1"="value} else {print $0} }
if (toupper(option)=="APPEND") { if (topx==1 && app!=1  ) {print $0 ;print item"="value;app=1} else { print $0 } }
}

END {}
function load() {
split($1,item1," ")
x1=item1[1]
if (x1!=NUL && substr(x1,1,1)!=";" ) {
   if (substr(x1,0,1)=="[") { if (toupper(x1)==toupper("["top"]")) { topx=1} else {topx=0}  }
   if (toupper(x1)==toupper(item)) {itemx=1} else {itemx=0}
}
}


2010.11.29 改进了一下
inifile.rar (1.08 KB, 下载次数: 74)

[ 本帖最后由 dos时代菜鸟 于 2010-11-29 16:22 编辑 ]
回复

使用道具 举报

63#
 楼主| 发表于 2010-8-26 13:39:49 | 只看该作者
利用 gdisk + awk +ndlist +bat 实现全部硬盘分区序列列表和最后一个可行备份分区位置(%lastp%)的确定,支持多个硬盘信息的搜集。
有多个 主引导分区时 lastp 被设置为 最后一个主引导分区
少于2个主引导分区时 lastp 被设置为 最后一个逻辑分区
只有一个分区且为主引导分区时 lastp 为 空
只有一个分区且为逻辑分区时    lastp 为该逻辑分
如果装载了 ifsdrv 也可以把ifsdrv 装载的分区盘符对应于表中。
awk/ndlist/drv0.awk/disks1.bat  另需要 gdisk.exe  v11自己找吧。

这里需要3个文件的整理融合: ndlist.txt (ifsdrv装载盘符列表)  gd.txt(gdisk 获取的硬盘分区信息列表) gdraw.txt(gdisk /raw 获取的分区信息主要用到他的 sys 列)
还有就是 没有分配盘符的可以被ifsdrv 装载的分区 对应的 id 类型表:0C,1C,04,14,06,16,0B,1B,07,17,01,11,0E,1E,83


因为 gdisk 体积庞大,调用耗时较多,运行会慢一些,但是 gdisk 获取的磁盘信息与ghost 兼容性更好一些,毕竟都是 ghost出品的。所以,要用ghost做备份,探测分区信息还是用 gdisk 要更稳妥一些。

disks1.bat 内容:
@echo off
if not %1*==* goto s2
if exist drv0.txt del drv0.txt >nul
ndlist >ndlist.txt
cls
echo 正在获取硬盘分区信息,请等待....
gdisk |awk 'NF>0 && $1!="Disk" {print "call disks1.bat "$1}' >disksx.bat
call disksx.bat
del disksx.bat
echo.
echo 全部硬盘分区序列:
echo 标号,盘符,ID,状态,类型,卷标,大小,格式,% ...
type drv0.txt

awk '/PRIMARY/' DRV0.TXT|AWK '{if (FNR==1) print "set p0="$1;p9=$1} END {print "set p9="p9}>%temp%\px.bat
awk '/LOGICAL/' DRV0.TXT|AWK '{l9=$1} END {print "set l9="l9}>>%temp%\px.bat
call %temp%\px.bat
del  %temp%\px.bat
set lastp=%p9%
if (%p9%)==(%p1%) set lastp=%l9%
for %%c in (p0 p9 l0 l9) do set %%c=
echo Last_partiton is %lastp%
goto end

:s2
echo 正在分析硬盘 #%1 ...
gdisk %1 >gd.txt
gdisk %1 /raw >gdraw.txt
awk -f drv0.awk -v d=%1 gd.txt >>drv0.txt

:end
if exist gd.txt del gd.txt >nul
if exist gdraw.txt del gdraw.txt >nul
if exist ndlist.txt del ndlist.txt >nul


-----------------
drv0.awk 内容:
BEGIN {d()}
{drv3()}
END {}
function drv3() {
if (($0~"PRIMARY") || ($0~"LOGICAL")) {
   m+=1
   dd=substr($0,2,2)
   if (substr($0,2,2)!~":") {dd="?."
     if ((ifs[1]!="Unavailable") && (ifsdrv~id[m])) {y+=1;dd=ifs[y]}
   }
   printf "%5s" ,d":"m;printf "%4s",dd" ";print id[m],substr($0,15)
}
}

function d() {
   ifsdrv="0C,1C,04,14,06,16,0B,1B,07,17,01,11,0E,1E,83"
   while ((getline<"gdraw.txt")>0) {
    if (($0~"PRIMARY") || ($0~"LOGICAL")) {n+=1;id[n]=$4}
   }
   while ((getline<"ndlist.txt")>0) {l+=1;ifs[(l-1)]=$1}
}

----------------------------

[ 本帖最后由 dos时代菜鸟 于 2010-8-26 21:45 编辑 ]
回复

使用道具 举报

62#
 楼主| 发表于 2010-8-24 12:31:20 | 只看该作者
Gawk 实现两个文件列融合
0.txt gdisk 1 >0.txt 获取

1.txt gdisk 1 /raw >1.txt 获取


我们的目的是 要把这两个文件 红圈 中的内容融合成一个文件,并与ghost磁盘标号一一对应。
2.txt 的内容如下:2.txt 内容的获取 通过命令:gawk –f p.awk 0..txt >2.txt




获取这个2.txt 文档的目的 是可以明朗的看出 没有被分配盘符的分区的 ID 号和 分区标号的对应关系 ,
这在DOS下判断没有被分配盘符分区中都有哪些是可以被IFSDRV 装载 非常重要。
同时也可以明朗的已分配盘符与 硬盘分区标号 间的对应关系。


p.awk 的内容如下:
BEGIN {
  while ((getline<"1.txt")>0) {
      if (($0~"PRIMARY") || ($0~"LOGICAL")) {n+=1 ; p0[n]=$4 }
  }

}
{
    if  (($0~"PRIMARY") || ($0~"LOGICAL")) {

       m+=1;print "1:"m,p0[m],substr($0,1,4),substr($0,15)
  }
}
END {}

命令:gawk –f p.awk 0.txt >2.txt
   用 gawk 调用脚本 p.awk 逐行分析 0.txt 的内容并把 结果传递给 文件2.txt
BEGIN 段:
   通过 WHILE 循环 处理 GETLINE 指令获取的 1.txt 为内容的文本流,如果1.txt形成的文本流的当前行包含 PRIMARY 或者LOGICAL 就将变量 n 增加 1 ,同时向数组p0 中添加一个以 n的内容 为名字以当前行第四的字段为内容的数组元素。
主程序段:{}
   逐行分析 0.txt ,如果当前行包含 PRIMARY 或者LOGICAL 就将变量 m 增加 1 ,显示1:m ,数组 p0 中元素p[m]的内容,以及当前行其他所需内容。


[ 本帖最后由 dos时代菜鸟 于 2010-8-24 12:44 编辑 ]

p.rar

991 Bytes, 下载次数: 71, 下载积分: 无忧币 -2

回复

使用道具 举报

61#
发表于 2010-4-9 08:21:19 | 只看该作者
dos时代菜鸟批处理写得这么好,把我请求的批处理改一下:
http://bbs.wuyou.net/forum.php?m ... &extra=page%3D2

各位版主也帮帮忙啊!
回复

使用道具 举报

60#
发表于 2010-3-30 15:13:33 | 只看该作者
原帖由 dos时代菜鸟 于 2010-3-30 15:05 发表
1 生成一个包含 命令 SET N=15 的脚本x.cmd
echo.|gawk '{print "set n="1+2+3+4+5}' >x.cmd

2 运行X.CMD

谢了 gawk for win    gawk " printf {....} "  要使用双引号 ,在双引号内 又不能用单引号 晕

晕啊 明明 gawk --help 中的例子 是用单引号 可实际上 还是要用双引号才行 晕了

[ 本帖最后由 oym2007 于 2010-3-30 15:23 编辑 ]
回复

使用道具 举报

59#
 楼主| 发表于 2010-3-30 15:05:35 | 只看该作者
1 生成一个包含 命令 SET N=15 的脚本x.cmd
echo.|gawk '{print "set n="1+2+3+4+5}' >x.cmd

2 运行X.CMD
回复

使用道具 举报

57#
 楼主| 发表于 2010-3-30 14:15:28 | 只看该作者
原帖由 oym2007 于 2010-3-30 13:57 发表

再请教dos下nset 可获得变量,Win下用那个?

1、nset 在win2000 下同样可以用。
2、可以用 gawk 的print 生成一个包含 SET 命令的 CMD 脚本,然后运行该脚本。
回复

使用道具 举报

56#
发表于 2010-3-30 13:57:04 | 只看该作者
原帖由 dos时代菜鸟 于 2010-3-12 08:03 发表


win32 下的 gawk 到处都是。

再请教dos下nset 可获得变量,Win下用那个?
回复

使用道具 举报

55#
发表于 2010-3-13 17:07:50 | 只看该作者
看来awk很强大

谢谢
回复

使用道具 举报

54#
 楼主| 发表于 2010-3-12 08:03:20 | 只看该作者
原帖由 oym2007 于 2010-3-11 21:28 发表

楼主能不能上传个 awk或gawk win32版


win32 下的 gawk 到处都是。
回复

使用道具 举报

53#
发表于 2010-3-11 21:28:07 | 只看该作者
原帖由 dos时代菜鸟 于 2010-3-11 15:28 发表
用 wbat+awk+nset 实现的 简单计算器
@echo off
set x=0
set n=0
:top
cls
call w.bat box @jsq.bat:menu
if errorlevel 100 goto end
set n=%x%
echo { print %x% }>jsq.awk
echo.|awk -f jsq.awk|n ...

楼主能不能上传个 awk或gawk win32版
回复

使用道具 举报

52#
 楼主| 发表于 2010-3-11 15:28:52 | 只看该作者
用 wbat+awk+nset 实现的 简单计算器
@echo off
set x=0
set n=0
:top
cls
call w.bat box @jsq.bat:menu
if errorlevel 100 goto end
set n=%x%
echo { print %x% }>jsq.awk
echo.|awk -f jsq.awk|nset x=$0
del jsq.awk
goto top

:menu "AWK 简单计算器"[x]
----------------------------------------------------
[$ x,50,!                                          ]
----------------------------------------------------
  可进行简单的四则混合运算(自动使用科学计数法)
  1 2 3 4 5 6 7 8 9 0 + - * / ( )
  sin(x)--正弦      cos(x)--余弦
  log(x)--自然对数  int(x)--取整
  sqrt(x)-取平方根  exp(x)--E的x次幂
----------------------------------------------------
%n%=%x%
:end
set x=
set n=
set ?=
set wbat=


jsq.rar (43.42 KB, 下载次数: 100)

[ 本帖最后由 dos时代菜鸟 于 2010-3-11 15:40 编辑 ]

1.JPG (31.23 KB, 下载次数: 161)

1.JPG
回复

使用道具 举报

51#
 楼主| 发表于 2010-1-20 22:56:19 | 只看该作者
随机数的产生:
产生一个0-62之间的随机整数

srand()
x=int(rand()*62)


获得的变量 x 就是答案
1、用srand()刷新系统seed
2、rand() 产生一个>0 而且 <1 的小数
rand()*100 得到的整数位应该是一个0-100 之间的随机数
那么rand()*62 得到一个62以内的数值 再用int取整即可得到所需随机数。

如果是 20-62 之间的随机数可以用 x=int(rand()*42+20) 来获得

[ 本帖最后由 dos时代菜鸟 于 2010-1-20 23:25 编辑 ]
回复

使用道具 举报

50#
发表于 2010-1-20 16:51:51 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

49#
发表于 2010-1-20 11:26:19 | 只看该作者

回复 #47 oym2007 的帖子

谢谢啦,我学习学习再报告.
回复

使用道具 举报

48#
发表于 2010-1-20 11:24:22 | 只看该作者

回复 #46 dos时代菜鸟 的帖子

谢谢,虽心有余无奈力不足.
回复

使用道具 举报

47#
发表于 2010-1-19 17:14:44 | 只看该作者
原帖由 lizhenduo 于 2010-1-18 16:50 发表
dos时代菜鸟
中校阁下:
我不想用通过 gdisk 获得的 disk1.txt,而用 ghost -dd 生成的 ghststat.txt,该怎样写批处理来获得最后分区和第一分区到变量(我是双硬盘),请帮忙写个现成的,谢谢啦.
还有,如果用磁盘扇 ...


专机专用 直接指定就行了 如必多此一举
ghost11.5 找最后一盘符

awk '$0~ /PID_POSITION_ID:/ {p=$2} END {print p}' ghststat.txt

[ 本帖最后由 oym2007 于 2010-1-19 19:14 编辑 ]
回复

使用道具 举报

46#
 楼主| 发表于 2010-1-19 10:54:56 | 只看该作者
原帖由 lizhenduo 于 2010-1-18 16:50 发表
dos时代菜鸟
中校阁下:
我不想用通过 gdisk 获得的 disk1.txt,而用 ghost -dd 生成的 ghststat.txt,该怎样写批处理来获得最后分区和第一分区到变量(我是双硬盘),请帮忙写个现成的,谢谢啦.
还有,如果用磁盘扇 ...



这些体力活,还是自己动手丰衣足食吧。要不然去看看 LINJIANG 的那个帖子。
参考32楼和27楼

需要熟悉GHSTSTAT.TXT 的文件结构和其他磁盘扇区读取工具的用法。

[ 本帖最后由 dos时代菜鸟 于 2010-1-19 11:09 编辑 ]
回复

使用道具 举报

45#
发表于 2010-1-18 16:50:12 | 只看该作者

回复 #1 dos时代菜鸟 的帖子

dos时代菜鸟
中校阁下:
我不想用通过 gdisk 获得的 disk1.txt,而用 ghost -dd 生成的 ghststat.txt,该怎样写批处理来获得最后分区和第一分区到变量(我是双硬盘),请帮忙写个现成的,谢谢啦.
还有,如果用磁盘扇区读写、分区信息管理工具 Dsptw 获得磁盘信息,又该怎样用 awk 来处理呢?
                                                                                                  谢谢

[ 本帖最后由 lizhenduo 于 2010-1-18 20:07 编辑 ]
回复

使用道具 举报

44#
 楼主| 发表于 2010-1-16 20:13:37 | 只看该作者
刚用awk调用 ucdos 特显功能 实现 我的dos工具箱 主菜单立体质感效果。呵呵
回复

使用道具 举报

43#
 楼主| 发表于 2010-1-15 07:10:02 | 只看该作者

awk 利用ucdos特显功能实现dos下立体感官按钮


附件
2010-1-15 17:00

m.GIF (7.38 KB)
  



awk 利用ucdos 特显功能中的绘图功能实现 纯dos下立体感官按钮效果
虚拟软盘: M.part1.rar (280 KB) M.part2.rar (228.88 KB)

这下,dos下的菜单也可以像win了。
软盘中的 awk\m.bat 是批处理,m.awk 是awk的脚本。
批处理需要choice 的协助。




[ 本帖最后由 dos时代菜鸟 于 2010-1-15 17:06 编辑 ]
回复

使用道具 举报

42#
 楼主| 发表于 2010-1-15 07:09:20 | 只看该作者
原帖由 快雪时晴 于 2010-1-14 21:06 发表
R:\>echo 111.111.111.111 | awk --posix "/([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}
/"
buffer: .
buffer: .
buffer: .
buffer: .
buffer: .
buffer: .
buffer: .
buffer: .
buffer: .
111.111.11 ...


用 | 再次传递给awk 处理一次。
回复

使用道具 举报

41#
发表于 2010-1-14 21:06:22 | 只看该作者

怎么让awk不要输出中间变量,太多的buffer了

R:\>echo 111.111.111.111 | awk --posix "/([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}
/"
buffer: .
buffer: .
buffer: .
buffer: .
buffer: .
buffer: .
buffer: .
buffer: .
buffer: .
111.111.111.111

我只要最后一行就可以了,怎么那么多buffer中间步骤也来了
回复

使用道具 举报

40#
发表于 2010-1-13 00:10:47 | 只看该作者

l练手二: 取得awk帮助文件的单词数

R:\>awk "BEGIN {i=0} /\w/ {i+=NF} END {print i}" 1.txt
143210

神啊,
一个小小的exe已经实现了太多的功能,它就是一个脚本语言解释器,
越接触越觉得强大
linux下的东西就是这样,太强大了,用的人反而少了,怕呀
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-12-1 09:37

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表