记住上一行的awk问题

记住上一行的awk问题,awk,Awk,我有以下awk文件 BEGIN { FS=":" }; {if (NR%2==1) { host=$1 }}; {if (NR%2==0) { print $host ":" $0 }}; 我想做以下几件事 如果行#为奇数,则存储第一个字段 如果行#为偶数,则打印先前存储的字段、冒号和当前行 目前,它输出偶数行两次“evenline:evenline” 不确定我做错了什么。应该是: BEGIN { FS=":" }; {if (NR%2==1) { host=$1 }}; {if (NR%2=

我有以下awk文件

BEGIN { FS=":" };
{if (NR%2==1) { host=$1 }};
{if (NR%2==0) { print $host ":" $0 }};
我想做以下几件事

如果行#为奇数,则存储第一个字段

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

目前,它输出偶数行两次“evenline:evenline”

不确定我做错了什么。

应该是:

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 }

哦,谢谢你!![厚颜无耻]它也可以写成
BEGIN{FS=“:”};NR%2{printf“%s:,$1;next};1