我有以下awk文件;
BEGIN { FS=":" };
{if (NR%2==1) { host=$1 }};
{if (NR%2==0) { print $host ":" $0 }};
我想做以下事情;
如果#行是奇数,则存储第1个字段。
如果#行是偶数,则打印先前存储的字段,冒号和当前行。
目前这两次输出偶数行"偶数行:偶数行"
不确定我做错了什么。
答案 0 :(得分:3)
应该是:
BEGIN { FS=":" };
{if (NR%2==1) { host=$1 }};
{if (NR%2==0) { print host ":" $0 }};
$host
- > host
。
为什么?
awk
中的字段名称以前面的美元$
开头。您可以awk
静态访问$1
,$2
等字段,也可以像$variable
一样动态访问。当用于字段名称时,变量将被转换为整数,因为awk
中的字段名称是数字。变量host
包含一个字符串,该字符串将被转换为0
。这使awk
打印$0
两次。
请注意,您可以简化此操作:
BEGIN { FS=":" }
NR%2==1 { host=$1 };
NR%2==0 { print host ":" $0 }