awk问题记住上一行

时间:2017-07-17 20:36:11

标签: awk

我有以下awk文件;

BEGIN { FS=":" };
{if (NR%2==1) { host=$1 }};
{if (NR%2==0) { print $host ":" $0 }};

我想做以下事情;

如果#行是奇数,则存储第1个字段。

如果#行是偶数,则打印先前存储的字段,冒号和当前行。

目前这两次输出偶数行"偶数行:偶数行"

不确定我做错了什么。

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 }