Awk:Var类型和输出格式

时间:2012-03-02 17:35:17

标签: variables awk


这是我的超级复杂awk程序:

#!/usr/bin/awk -f
BEGIN {
count = 0
}

{ if ( $1 == "r" )
    {
    nom = $2 
    ip= $7
    numerolinea = NR
    }
 else { 
  where = match($0, "Fast")
  if ( where ) 
    {
     count++
     printf( "\t%5i %20s %15s\n",count,nom,ip )     
    }
      } 
}

因此,您可以看到nomip被视为字符串,每个字符串都有自己的长度。输出的摘录就像这样:

    | 111          cutemyserver1     93.27.255.24 |                                                                                       
    | 112 thisisthenamemyserver2     60.231.2.255 |                                                                                       
    | 113   anotherlongmyserver3   191.44.192.260 |                                                                                       
    | 114              myserver4   173.374.76.183 |                                                                                       
    | 115           formyserver5    145.146.321.8 |                                                                                       
    | 116              myserver6     64.31.359.70 |                                                                                       
    | 117        foofoomyserver7    245.16.19.338 |

正如您所看到的,count是一个整数。我的目标是countnomip对齐,因为这样:

    | 8            myserver6  91.580.144.231 |                                                                                         
    | 9                narnd   163.11.783.10 |                                                                                         
    | 10                erreer   59.194.0.353 |                                                                                        
    | 11                111111  178.70.644.91 | 

但作弊%5i不起作用。

由于

1 个答案:

答案 0 :(得分:1)

我已经修复了你的问题,并冒昧地让你的代码更像“awk-like”:

#!/usr/bin/awk -f

$1=="r" {nom=$2;ip=$7;next;}

/Fast/ {printf "\t%5d %20s %15s\n",++count,nom,ip;}

NB。

  1. count在此示例中不需要初始化。
  2. numerolinea未被引用
  3. condition {...}更像是一种“类似awk”的说法if...then
  4. next可防止后续测试条件
  5. ++count在提供其值
  6. 之前更新变量 正则表达式/Fast/ {...}位于Fast 时执行
  7. $0
  8. 正如Glenn所说,%5d是您printf
  9. 中需要的语法