这是我的超级复杂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 )
}
}
}
因此,您可以看到nom
和ip
被视为字符串,每个字符串都有自己的长度。输出的摘录就像这样:
| 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
是一个整数。我的目标是count
与nom
和ip
对齐,因为这样:
| 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
不起作用。
由于
答案 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。
count
在此示例中不需要初始化。numerolinea
未被引用condition {...}
更像是一种“类似awk”的说法if...then
next
可防止后续测试条件++count
在提供其值/Fast/ {...}
位于Fast
时执行$0
%5d
是您printf