[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] gawk命令的%号和引号问题

近来学习gawk,发现有很多问题,因为主要是在bat里运行的,故很多命令不出效果,如下:
使用printf格式化字符串:
文本a.txt:
  1. Fruit            Frice/lbs            Quantity
  2. Banana           $0.89                100
  3. Peach            $0.79                65
  4. Kiwi             $1.50                22
  5. Pineapple        $1.29                35
  6. Apple            $0.99                78
复制代码
代码:
  1. 原代码:
  2. gawk '{ printf "%-15s %s",$1,$3 ; }' a.txt
  3. 为了在bat中执行,将'变为"
  4. gawk "{ printf "%-15s %s",$1,$3 ; }" a.txt
  5. 结果运行后没有任何消息;
复制代码
找了这个教程:
http://bbs.bathome.net/viewthrea ... &highlight=gawk
运行如下指令:
  1. Rem 每行后面增加一行空行
  2. gawk "1;{print ""}"
  3. gawk "BEGIN{ORS="\n\n"};1"
  4. Rem 每行后面增加两行空行
  5. gawk "1;{print "\n"}"
  6. 错误消息:
  7. gawk: cmd. line:1: 1;{print \n}
  8. gawk: cmd. line:1:          ^ backslash not last character on line
  9. gawk: cmd. line:1: 1;{print \n}
  10. gawk: cmd. line:1:          ^ syntax error
复制代码
故该怎么解决?先感谢了!

本帖最后由 zhanglei1371 于 2014-3-7 14:58 编辑

回复 3# DAIC

可否解释下gawk后面的阿拉伯数字1是什么意思,另外,有这样的句子:

    gawk '($2 ~ /^\$[1-9][0-9]*\.[0-9][0-9]$/) && ($3<75){ printf "%s%t%s%t%s",$0,"*", ; }'
后面出现了"REORDER"及中间的%t,(我知道s代表字符串,d为是数字),不知何意,可否解释下?谢谢

TOP

回复 5# PowerShell


    PS虽然很强,但是毕竟我还是用xp居多,单位电脑全是xp。ps通用性不如bat
不过以后肯定会去学习,已经看过些资料了

TOP

回复 7# DAIC


    谢谢,终于知道了,原来1等价于{print $0},那么,\t和reorder呢?可否指点下含义,或是给出些参考?

TOP

回复 11# DAIC


    从这里看到的:Gawk简明教程:
http://www.truevue.org/linux/gawk-introduction
在模式中使用关系表达式

5). gawk '$3<=75 { printf "%s%t%s\n",$0,"REORDER" ; } $3>75 print $0; ' fruit.txt

在模式中使用匹配、正则表达式、关系表达式、逻辑表达式样

6). gawk '($2 ~ /^\$[1-9][0-9]*\.[0-9][0-9]$/) && ($3<75){ printf "%s%t%s%t%s",$0,"*","REORDER" ; }' fruit.txt

去掉了就会出错

TOP

本帖最后由 zhanglei1371 于 2014-3-7 22:39 编辑

回复 13# DAIC

谢谢DAIC大校,上面的式子修改后的确可以了,但是加个\"REORDER\"是何意?发现随便改成其他的字串也行,去掉就会出错,最后想再请教下这里:
gawk "{($4>0)? print $4: print $1}" a.txt          --------------错误
gawk "{($4>0)? }{print $4}:{ print $1}" a.txt          --------------错误
而这样写就可以:gawk "{print ($4>0)? $4: $1}" a.txt
这样也行:gawk "{if ($4>0) {print $4} else {print $1}}" a.txt
为何前面两个print就不行呢?

TOP

返回列表