记住上一行的awk问题
我有以下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=
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