我目前正在处理 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
EDIT2:固定。永远不要在 awk 中调用任何 $ 变量,除非它是一个字段号。 :)
awk '{
logName=$1;
sub(/^.*\//,"",logName);
sub(/\..*:/,"",logName);
print logName;
logName=logName $2;
print logName;
}' $file
最佳答案
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
关于linux - Awk:无法连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18111781/