gpt4 book ai didi

linux - Awk:无法连接字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:23:05 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com