linux - Awk:无法连接字符串

标签 linux awk concatenation

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

相关文章:

Bash 就地替换文本

c++ - C++ 中的连接宏

sql - 将 SQL 表导出为固定长度格式

linux - Unix - 递归计算文件类型的数量

PHP mkdir : 0777 becomes 0755?

linux - bash 函数未能给出返回值

awk:以原始格式打印列

php - .htaccess 甚至阻止 php 访问

linux - AWK,如何计算uniq http代码

python - 创建月末电子表格