无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: dos时代菜鸟
打印 上一主题 下一主题

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

[复制链接]
31#
发表于 2010-1-12 18:33:43 | 只看该作者
gawk初级应用

初试gawk,发现太强大了。确定硬盘最后分区,一行搞定。[08.01.17]
http://bbs.wuyou.net/forum.php?m ... tra=&highlight=


抛砖引玉:利用ghost的ghststat.txt确定活动分区及最后有效分区的方法 [09.06.19]
http://bbs.wuyou.net/forum.php?m ... ghlight=&page=1
回复

使用道具 举报

32#
 楼主| 发表于 2010-1-12 18:51:27 | 只看该作者
原帖由 oym2007 于 2010-1-12 16:25 发表
学习了的确好用,谢谢
awk '/Key/ {print $2}' ghststat.txt|awk '/1:/ {p=$1} END {print p}|nset bakp=$1 一句就能找到最后盘符


刚测试,发现这句话有个漏洞,就是,如果有多个硬盘,可能会把 "2.1:"  这样的条目计算进来
改用:
awk '/Key/&&/1:/ {if (substr($2,(length($2)))!=":") p=$2} END {print p}' GHSTSTAT.TXT|nset bakp=$1
应该好一些。

也可以事先编辑如下内容的脚本 g.awk
{if (($1~"Key")&&($2~"1:[1-9]")) p=$2}
END {print p}

然后运行 awk -f g.awk GHSTSTAT.TXT|nset bakp=$1

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

使用道具 举报

33#
发表于 2010-1-12 18:54:59 | 只看该作者
回复

使用道具 举报

34#
发表于 2010-1-12 19:29:33 | 只看该作者

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

gawk官网下只有src,没编译器编译
http://www.gnu.org/software/gawk/gawk.html

另外
http://gnuwin32.sourceforge.net/packages/gawk.htm
只能用于WIN95以上

是否DOS下的必须自己编译?TC2能编译吗?
回复

使用道具 举报

35#
 楼主| 发表于 2010-1-12 19:33:18 | 只看该作者
原帖由 快雪时晴 于 2010-1-12 19:29 发表
gawk官网下只有src,没编译器编译
http://www.gnu.org/software/gawk/gawk.html

另外
http://gnuwin32.sourceforge.net/packages/gawk.htm
只能用于WIN95以上

是否DOS下的必须自己编译?TC2能编译吗?


很久没有弄 tc 了,如果老兄能编译成功,别忘了放上来 一个。
回复

使用道具 举报

36#
发表于 2010-1-12 19:38:39 | 只看该作者
原帖由 快雪时晴 于 2010-1-12 19:29 发表
gawk官网下只有src,没编译器编译
http://www.gnu.org/software/gawk/gawk.html

另外
http://gnuwin32.sourceforge.net/packages/gawk.htm
只能用于WIN95以上

是否DOS下的必须自己编译?TC2能编译吗?


#1,#21的都是dos版的。
回复

使用道具 举报

37#
发表于 2010-1-12 20:07:41 | 只看该作者
awk似乎还用上了一些c语言的语法?
回复

使用道具 举报

38#
发表于 2010-1-12 21:13:55 | 只看该作者

WIN32下单引号如何处理?(已解决)

R:\>awk 'BEGIN { print "hello,world" }'
awk: 'BEGIN
awk: ^ invalid char ''' in expression



看来在WIN32下要用
AWK -f f.AWK  in.txt

形式才可以。

[ 本帖最后由 快雪时晴 于 2010-1-12 21:12 编辑 ]
回复

使用道具 举报

39#
发表于 2010-1-12 21:55:02 | 只看该作者

新学awk,小试一下

点出所有的字符a
R:\>type 1.txt
Usage: awk [POSIX or GNU style options] -f progfile [--] file ...
Usage: awk [POSIX or GNU style options] [--] 'program' file ...
POSIX options:          GNU long options:
        -f progfile             --file=progfile
        -F fs                   --field-separator=fs
        -v var=val              --assign=var=val
        -m[fr] val
        -W compat               --compat
        -W copyleft             --copyleft
        -W copyright            --copyright
        -W dump-variables[=file]        --dump-variables[=file]
        -W exec=file            --exec=file
        -W gen-po               --gen-po
        -W help                 --help
        -W lint[=fatal]         --lint[=fatal]
        -W lint-old             --lint-old
        -W non-decimal-data     --non-decimal-data
        -W profile[=file]       --profile[=file]
        -W posix                --posix
        -W re-interval          --re-interval
        -W source=program-text  --source=program-text
        -W traditional          --traditional
        -W usage                --usage
        -W use-lc-numeric       --use-lc-numeric
        -W version              --version
To report bugs, see node `Bugs' in `gawk.info', which is
section `Reporting Problems and Bugs' in the printed version.
gawk is a pattern scanning and processing language.
By default it reads standard input and writes standard output.
Examples:
        gawk '{ sum += $1 }; END { print sum }' file
        gawk -F: '{ print $1 }' /etc/passwd




代码f.awk:
  1. BEGIN { print "hello,world===============" }
  2. {print $0}
  3. {gsub(/[^a\t]/," ");print}
  4. {gsub("a","A",$0);print}
  5. {last=$1}
  6. END {print "\nthe last is =" $1 }
复制代码
命令:
awk  -f f.awk 1.txt








hello,world===============
Usage: awk [POSIX or GNU style options] -f progfile [--] file ...
  a    a                                                         
  A    A                                                         
Usage: awk [POSIX or GNU style options] [--] 'program' file ...
  a    a                                           a           
  A    A                                           A           
POSIX options:  GNU long options:
                                 
                                 
-f progfile  --file=progfile
                             
                             
-F fs   --field-separator=fs
                    a a      
                    A A      
........

Examples:
  a      
  A      
gawk '{ sum += $1 }; END { print sum }' file
  a                                          
  A                                          
gawk -F: '{ print $1 }' /etc/passwd
  a                            a   
  A                            A   
the last is =A



awk实在太强了,竟然有正则

[ 本帖最后由 快雪时晴 于 2010-1-12 22:02 编辑 ]
回复

使用道具 举报

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下的东西就是这样,太强大了,用的人反而少了,怕呀
回复

使用道具 举报

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中间步骤也来了
回复

使用道具 举报

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 处理一次。
回复

使用道具 举报

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 编辑 ]
回复

使用道具 举报

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

使用道具 举报

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 编辑 ]
回复

使用道具 举报

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 编辑 ]
回复

使用道具 举报

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 编辑 ]
回复

使用道具 举报

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

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

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

使用道具 举报

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

回复 #47 oym2007 的帖子

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

使用道具 举报

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

使用道具 举报

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 编辑 ]
回复

使用道具 举报

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, 下载次数: 160)

1.JPG
回复

使用道具 举报

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版
回复

使用道具 举报

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

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


win32 下的 gawk 到处都是。
回复

使用道具 举报

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

谢谢
回复

使用道具 举报

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


win32 下的 gawk 到处都是。

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

使用道具 举报

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

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

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

使用道具 举报

58#
发表于 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}".....   请赐教
回复

使用道具 举报

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
回复

使用道具 举报

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 编辑 ]
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-28 12:56

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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