Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String BASH-从字符串中提取数据_String_Bash_Variables - Fatal编程技术网

String BASH-从字符串中提取数据

String BASH-从字符串中提取数据,string,bash,variables,String,Bash,Variables,我有一个返回数千行数据的日志,我想从中提取一些值 日志中只有一行包含unquie单元参考,因此我可以使用以下方法对此进行grep: grep“unit=Central-C152”logfile.txt 产生类似于以下内容的输出行: a3cd23e,85d58f5,53f534abef7e7,unit=Central-C152,locale=32325687-8595-9856-1236-12546975,11="School",1="Mr Green",2="Qual",3="SWE",8="r

我有一个返回数千行数据的日志,我想从中提取一些值

日志中只有一行包含unquie
单元
参考,因此我可以使用以下方法对此进行grep:

grep“unit=Central-C152”logfile.txt

产生类似于以下内容的输出行:

a3cd23e,85d58f5,53f534abef7e7,unit=Central-C152,locale=32325687-8595-9856-1236-12546975,11="School",1="Mr Green",2="Qual",3="SWE",8="report",5="channel",7="reset",6="velum"
行的格式可能会改变,因为值的顺序并不总是在同一位置

我正试图找出如何将2和7的值放入单独的变量中。 我曾考虑过
cut
on,或=但由于值不是按设定顺序排列的,所以我无法找到最好的方法

我正试图得到:

var state=不带引号的值2
var模式=不带引号的7的值

有人能建议最好的方法吗


谢谢

请尝试以下创建变量值

state=$(awk '/unit=Central-C152/ && match($0,/2=\"[^"]*/){print substr($0,RSTART+3,RLENGTH-3)}' Input_file)
mode=$(awk '/unit=Central-C152/ && match($0,/7=\"[^"]*/){print substr($0,RSTART+3,RLENGTH-3)}'  Input_file)
您也可以通过执行以下操作来打印它们

echo "$state"
echo "$mode"
解释:现在也添加命令解释

awk '                                           ##Starting awk program here.
/unit=Central-C152/ && match($0,/2=\"[^"]*/){   ##Checking condition if a line has string (unit=Central-C152) and using match using REGEX to check from 2 to till "
  print substr($0,RSTART+3,RLENGTH-3)           ##Printing substring starting from RSTART+3 till RLENGTH-3 characters.
}
' Input_file                                    ##Mentioning Input_file name here.

请尝试以下方法来创建变量的值

state=$(awk '/unit=Central-C152/ && match($0,/2=\"[^"]*/){print substr($0,RSTART+3,RLENGTH-3)}' Input_file)
mode=$(awk '/unit=Central-C152/ && match($0,/7=\"[^"]*/){print substr($0,RSTART+3,RLENGTH-3)}'  Input_file)
您也可以通过执行以下操作来打印它们

echo "$state"
echo "$mode"
解释:现在也添加命令解释

awk '                                           ##Starting awk program here.
/unit=Central-C152/ && match($0,/2=\"[^"]*/){   ##Checking condition if a line has string (unit=Central-C152) and using match using REGEX to check from 2 to till "
  print substr($0,RSTART+3,RLENGTH-3)           ##Printing substring starting from RSTART+3 till RLENGTH-3 characters.
}
' Input_file                                    ##Mentioning Input_file name here.

您最好在Awk中完成所有处理

awk -F, '/unit=Central-C152/ {
    for(i=1;i<=NF;++i)
        if($i ~ /^[27]="/) {
            b[++k] = $i
            sub(/^[27]="/, "", b[k])
            sub(/"$/, "", b[k])
            gsub(/\\/, "", b[k])
        }
    print "state " b[1] ", mode " b[2]
    }' logfile.txt
awk-F'/unit=Central-C152/{

对于(i=1;i您最好在Awk中完成所有处理

awk -F, '/unit=Central-C152/ {
    for(i=1;i<=NF;++i)
        if($i ~ /^[27]="/) {
            b[++k] = $i
            sub(/^[27]="/, "", b[k])
            sub(/"$/, "", b[k])
            gsub(/\\/, "", b[k])
        }
    print "state " b[1] ", mode " b[2]
    }' logfile.txt
awk-F'/unit=Central-C152/{

对于(i=1;i假设变量中已经有行,例如:

line="$(grep 'unit=Central-C152' logfile.txt | head -1)"
然后,您可以简单地使用
bash
的内置参数替换功能:

f2=${line#*2=\"} ; f2=${f2%%\"*} ; echo ${f2}
f7=${line#*7=\"} ; f7=${f7%%\"*} ; echo ${f7}
每行上的第一个命令将删除该行的第一部分,直到并包括
=”
。然后第二个命令将删除第一个引号以外的所有内容。当然,第三个命令只是回显该值

当我对输入行运行这些命令时,我看到:

Qual
reset

据我所见,这就是您所追求的。

假设您已经在一个变量中有了行,例如:

line="$(grep 'unit=Central-C152' logfile.txt | head -1)"
然后,您可以简单地使用
bash
的内置参数替换功能:

f2=${line#*2=\"} ; f2=${f2%%\"*} ; echo ${f2}
f7=${line#*7=\"} ; f7=${f7%%\"*} ; echo ${f7}
每行上的第一个命令将删除该行的第一部分,直到并包括
=”
。然后第二个命令将删除第一个引号以外的所有内容。当然,第三个命令只是回显该值

当我对输入行运行这些命令时,我看到:

Qual
reset
从我看来,这就是你想要的