Chinaunix

标题: awk的执行系统命令问题 [打印本页]

作者: chaseey    时间: 2012-10-18 12:39
标题: awk的执行系统命令问题
[root@localhost ~]$echo "14-Oct-2012"|awk '{a=$0;"date -s 'a' +%F"|getline b;print b}'
2012-10-10
请问哪里出错了,得出的日期不正确.
作者: angle4    时间: 2012-10-18 12:43
没看懂你要干嘛

awk 执行系统命令应该用 system 吧

如: $ echo | awk '{system("date")}'
Thu Oct 18 12:48:40 CST 2012
作者: chaseey    时间: 2012-10-18 13:41
回复 2# angle4


    其实是.有如下内容:
  1. 10/Oct/2012:10:39:45
  2. 11/Oct/2012:10:39:45
  3. 12/Oct/2012:10:39:45
  4. 13/Oct/2012:10:39:45
  5. 14/Oct/2012:10:39:45
复制代码
把11/Oct/2012 替换为2012-10-11

作者: blackold    时间: 2012-10-18 14:53
回复 1# chaseey


    不能用单引号啊。

try
  1. echo "14-Oct-2012"|awk '{a=$0;"date -s " a " +%F"|getline b;print b}'
复制代码

作者: greysky-zfj    时间: 2012-10-18 15:27
  1. echo "10/Oct/2012:10:39:45" | awk -F '/|:' '{system("date -d"$1$2$3" +%F")}'
复制代码

作者: chaseey    时间: 2012-10-18 16:08
回复 6# greysky-zfj


    这个可以执行,不过我还有个要求是date 输出到标准输出,awk 还要读取这个标准输出作为判断条件. 所以我用的getline

system("")|getline 不行
"  " |getline 可以,不过加上参数后出错.
作者: kk5234    时间: 2012-10-18 16:22
本帖最后由 kk5234 于 2012-10-18 16:26 编辑

回复 7# chaseey
  1. echo "14-Oct-2012"|awk '{a=$0;cmd="date +%F -d "a"";cmd|getline b;print b}'
  2. 2012-10-14
复制代码

作者: chaseey    时间: 2012-10-18 17:43
回复 8# kk5234


    这个可以!! 为什么命令需要中间赋值?
作者: jason680    时间: 2012-10-18 20:18
回复 9# chaseey

$ echo "14-Oct-2012" | awk '{"date +%F -d "$0 | getline; print}'
2012-10-14

   
作者: L_kernel    时间: 2012-10-19 11:23
chaseey 发表于 2012-10-18 17:43
回复 8# kk5234
为了看起来,显得不那么乱,同时方便调试print cmd,执行的命令是否正确。
作者: chaseey    时间: 2012-10-19 16:29
9楼的报错
$echo "14-Oct-2012" | awk '{"date +%F -d "$0 | getline; print}'
sh: 14-Oct-2012: command not found
14-Oct-2012


7楼的 成功
$echo "14-Oct-2012"|awk '{a=$0;cmd="date +%F -d "a"";cmd|getline b;print b}'
2012-10-14

这是上面不使用中间变量
$echo "14-Oct-2012"|awk '{"date +%F -d "$0""|getline b;print b}'
awk: (FILENAME=- FNR=1) fatal: expression for `|' redirection has null string value

结果是,需要cmd="..";cmd|getline x;才成功.




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2