Linux/Bash If条件等于包含单引号的字符串
关于下面的命令,我尝试将日志文件中以空格分隔的内容插入一个数组(arr),然后设置一个条件,从中查找并提取一个特定的字符串。 问题是主题字符串被单个引号包围,我不知道在条件语句中包含这些引号的正确语法是什么:Linux/Bash If条件等于包含单引号的字符串,bash,if-statement,split,Bash,If Statement,Split,关于下面的命令,我尝试将日志文件中以空格分隔的内容插入一个数组(arr),然后设置一个条件,从中查找并提取一个特定的字符串。 问题是主题字符串被单个引号包围,我不知道在条件语句中包含这些引号的正确语法是什么: cat file.log | nawk '{split($0,arr," "); for (i=1;i<=NF;i++) if (arr[i]=='serviceid') printf ("%s,%s\n",arr[i],arr[i+1])}'
cat file.log | nawk '{split($0,arr," "); for (i=1;i<=NF;i++) if (arr[i]=='serviceid') printf ("%s,%s\n",arr[i],arr[i+1])}'
只需使用包含所需值的变量:
awk -v str="'serviceid'" … …
这将避免在脚本中进行复杂的引用。整个awk脚本都包含单引号,这使得单引号的使用变得困难 另外,您发布的日志文件示例中有一个字段,其结尾为冒号
“serviceid”:
。如果字段在空白处拆分。您可以将其附加到上面定义的变量,或者使用
~
(匹配)运算符而不是==
(相等)运算符。该运算符(~
)将匹配包含'serviceid'
的任何字段
像这样:
nawk -vstr="'serviceid'" '
$0~str{
split($0,arr," ");
for (i=1;i<=NF;i++)
if (arr[i]~str)
printf ("%s,%s\n",arr[i],arr[i+1])
}' file.log
如果您能提供一个日志文件的简短示例,这样我们就可以测试代码了,那就太好了。谢谢,请在需要报价的地方使用\047。通常在BEGIN中将其分配给var,然后使用:)@aschkant如果答案有助于解决您的问题,通常会“接受”答案。亲爱的@sorontar,请阅读完毕^^
awk -v str="'serviceid'" … …
nawk -vstr="'serviceid'" '
$0~str{
split($0,arr," ");
for (i=1;i<=NF;i++)
if (arr[i]~str)
printf ("%s,%s\n",arr[i],arr[i+1])
}' file.log
nawk -vstr="'serviceid'" '$0~str{ split($0,arr," "); for (i=1;i<=NF;i++) if (arr[i]~str) printf ("%s,%s\n",arr[i],arr[i+1]) }' infile