我目前正在处理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