我目前正在处理awk,我有三个变量要处理:
$0变量-在本例中,它相当于:
path/filename.cpp LOG_ERR << "error in this log" << e.what();
$logname变量-我解析了cpp文件的名称,即:
filename
$2变量-包含默认的第二个值:
LOG_ERR
问题:
我要做的是连接如下值:
logName=$logName $2;
但我得到的不是预期值filenameLOG_ERR,而是:
filename LOG_ERR << "error in this log" << e.what();
我做错什么了?
编辑:AWK代码按要求:

awk '{
logName=sub(/^.*\//,"",$1);
logName=sub(/\..*:/,"",$logName);

print $logName;
print $2;

logName=$logName $2;

print $logName;
}' $file

编辑2:已修复。不要在awk中调用任何$variables,除非它是字段号。:)
awk '{
logName=$1;
sub(/^.*\//,"",logName);
sub(/\..*:/,"",logName);
print logName;
logName=logName $2;
print logName;
}' $file

最佳答案

logName=$logName $2;

这个密码是错的。
您使用了$logName,这意味着列索引logName,显然这不是您想要的。
如果logName的值是stringfilename,awk将尝试在此处获取column$filename,如果变量未定义/分配,并且您尝试将其获取为number,awk将获得0。您可以测试:
kent$ echo "xxxx y y"|awk '{print $foo}'
xxxx y y

所以我想,解决方法是:(如果如您所说,logName被设置为正确的值)
logName=logName $2;

编辑
您不应该调用$logName检查以下示例:
kent$echo "111 222"|awk -v logName="filename" '{logName=logName $2;print logName}'
filename222

10-07 17:10