我目前正在处理AWK,我有三个与我合作的变量:
path/filename.cpp LOG_ERR << "error in this log" << e.what();
filename
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
EDIT2:已修复。永远不要在awk中调用任何$变量,除非它是字段编号。 :)
awk '{
logName=$1;
sub(/^.*\//,"",logName);
sub(/\..*:/,"",logName);
print logName;
logName=logName $2;
print logName;
}' $file
答案 0 :(得分:2)
logName=$logName $2;
这段代码错了。
您使用了$logName
,这意味着列索引logName
,显然它不是您想要的。
如果logName
的值是字符串filename
,则awk将尝试在此处获取列
$filename
,如果未定义/分配变量,并且您尝试将其作为数字, 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