首页 > 试题广场 >

业务分析-提取值

[编程题]业务分析-提取值
  • 热度指数:9774 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
假设我们的日志nowcoder.txt里,内容如下
12-May-2017 10:02:22.789 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server version:Apache Tomcat/8.5.15
12-May-2017 10:02:22.813 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:May 5 2017 11:03:04 UTC
12-May-2017 10:02:22.813 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server number:8.5.15.0
12-May-2017 10:02:22.814 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:Windows, OS Version:10
12-May-2017 10:02:22.814 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:x86_64
现在需要你提取出对应的值,输出内容如下
serverVersion:Apache Tomcat/8.5.15
serverName:8.5.15.0
osName:Windows
osVersion:10
这个我看没问题,不知道怎么过不了
awk -F"log" '{print $2}' nowcoder.txt|sed 's/,/\n/' |grep -iE 'server [v|n]|os'|awk '{print tolower($1) toupper(substr($2,0,1))substr($2,2)" "$3}'
发表于 2024-03-28 12:56:46 回复(0)
awk -F ":" '{
if(NR==1){
print "serverVersion:"$4
}
if(NR==3){
print "serverName:"$4
}
if(NR==4){
print "osName:"substr($4,0,7)
print "osVersion:"$5
}
}' nowcoder.txt
发表于 2023-01-17 15:54:17 回复(0)

awk+gensub+正则

awk '{
    if($6 == "Server") {
        if($7 ~/version:.*/){
            sversion = gensub(/(.*)version:(.*)/, "\\2", "g", $0) 
        }
        else if($7 ~/number:.*/){
            sname = gensub(/(.*)number:(.*)/, "\\2", "g", $0) 
        }
    }
    else if($6 == "OS"){
        oname = gensub(/(.*)Name:(.*),(.*)/, "\\2", "g", $0)
        oversion = gensub(/(.*)Version:(.*)/, "\\2", "g", $0)
    }
}
END{
    print("serverVersion:"sversion"\n""serverName:"sname"\n""osName:"oname"\n""osVersion:"oversion)
}' nowcoder.txt
发表于 2022-08-28 00:38:26 回复(0)
cat nowcoder.txt | 
awk -F ':' '{
    if(NR==1)
        svs=$4
    if(NR==3)
        snm=$4
    if(NR==4)
    {
        split($4,arr,",")
        onm=arr[1]
        ovs=$5
    }
}END{
    printf("serverVersion:%s\nserverName:%s\nosName:%s\nosVersion:%s\n",svs,snm,onm,ovs)
}'

发表于 2022-08-12 14:03:38 回复(0)
笨办法:
cat nowcoder.txt|awk -F ":" '/.*version:.*/{printf("%s:%s\n","serverVersion",$4)}'
cat nowcoder.txt|awk -F ":" '/.*number:.*/{printf("%s:%s\n","serverName",$4)}'
cat nowcoder.txt|awk -F ":" '/.*OS Name:.*/{print $4}'|awk -F "," '{printf("%s:%s\n","osName",$1)}'
cat nowcoder.txt|awk -F ":" '/.*OS Version:.*/{printf("%s:%s\n","osVersion",$5)}'

发表于 2022-06-29 19:30:47 回复(0)
serverVersion="$(awk '{print $7}' nowcoder.txt|grep version|cut -d':' -f2) $(awk '{print $8}' nowcoder.txt|grep /|cut -d':' -f2)"
serverName=`awk '{print $7}' nowcoder.txt|grep number|cut -d':' -f2`
osName=`awk '{print $7}' nowcoder.txt| grep Name|cut -d':' -f2|cut -d',' -f1`
osVersion=`awk '{print $9}' nowcoder.txt|grep Version|cut -d':' -f2`

echo "serverVersion:${serverVersion}"
echo "serverName:${serverName}"
echo "osName:${osName}"
echo "osVersion:${osVersion}"
发表于 2022-06-17 08:53:05 回复(0)
awk '{if($0 ~ /Server version/){split($(NF-1),arr,":");print "serverVersion:"arr[2],$(NF)}}' nowcoder.txt
awk '{if($0 ~ /Server number/){split($(NF),arr,":");print "serverName:"arr[2]}}' nowcoder.txt
awk '{if($0 ~ /OS Name/){print "osName:"substr($7,6,length($7)-6)}}' nowcoder.txt
awk '{if($0 ~ /OS Version/){split($(NF),arr,":");print "osVersion:"arr[2]}}' nowcoder.txt
发表于 2022-06-03 12:00:32 回复(0)
grep 正则 -P 使用perl表达式 -o occurence 只截取匹配部分
echo "serverVersion:$(grep -Po "(?<=Server version:).*" nowcoder.txt)"
echo "serverName:$(grep -Po "(?<=Server number:).*" nowcoder.txt)"
echo "osName:$(grep -Po "(?<=OS Name:).*(?=,)" nowcoder.txt)"
echo "osVersion:$(grep -Po "(?<=OS Version:).*" nowcoder.txt)"


发表于 2022-05-12 22:11:11 回复(0)
方法一:
awk 'NR==1||NR==3{print $6$7,$8)}NR==4{$0=$6$7$8$9;FS=",";$0=$0;print $1"\n"$2}' nowcoder.txt
如上可从文件中直接提取出完整内容,提交后发现大小写不符且每条记录的处理还不同遂放弃。
方法二:
awk -F '[ :,]+' 'NR==1{print "serverVersion:"$10,$11}NR==3{print "serverName:"$10}NR==4{print "osName:"$10"\nosVersion:"$13}' nowcoder.txt
发表于 2022-05-02 16:42:15 回复(1)
awk -F"[ :,]+" '{a[0]="";if($0 ~ ".*Server version.*") { a[1]=$10" "$11; }if($0 ~ ".* Server number.*") { a[2]=$10; }if($0 ~ ".*OS Name.*") { a[3]=$10;a[4]=$13; }}END{printf "serverVersion:%s\nserverName:%s\nosName:%s\nosVersion:%s\n",a[1],a[2],a[3],a[4]}'

发表于 2022-03-31 10:48:12 回复(0)
#!/bin/bash

i=1
while read line
do
    if [ $i -eq 1 ];then
        echo $line | awk -F 'org.apache.catalina.startup.VersionLoggerListener.log' '{print $2}' | sed 's/ Server version/serverVersion/g'
    elif [ $i -eq 2 ];then
        echo -n ""
    elif [ $i -eq 3 ];then
        echo $line | awk -F 'org.apache.catalina.startup.VersionLoggerListener.log' '{print $2}' | sed 's/ Server number/serverName/g'
    elif [ $i -eq 4 ];then
        echo $line | awk -F 'org.apache.catalina.startup.VersionLoggerListener.log' '{print $2}' |  tr ',' '\n' | sed 's/ OS /os/g'
    elif [ $i -eq 5 ];then
        echo -n ""
    fi
    let i++
done < nowcoder.txt
发表于 2022-03-02 21:41:32 回复(0)
awk  'BEGIN{FS="[:,]"}/version/{print "serverVersion:"$NF}/number/{print "serverName:"$NF}/OS/{print "osName:"$(NF-2);print "osVersion:"$NF}' nowcoder.txt
发表于 2022-03-01 12:03:20 回复(0)
#!/bin/bash
serverVersion=`cat nowcoder.txt |grep 'Server version'|awk -F':' '{print $NF}'`
serverName=`cat nowcoder.txt |grep 'Server number'|awk -F':' '{print $NF}'`
osName=`cat nowcoder.txt |grep 'OS Name'|awk '{print $7}'|cut -d':' -f2|sed 's/,//g'`
osVersion=`cat nowcoder.txt |grep 'OS Version'|awk -F':' '{print $NF}'`

echo "serverVersion:$serverVersion"
echo "serverName:$serverName"
echo "osName:$osName"
echo "osVersion:$osVersion"
发表于 2022-02-17 20:01:23 回复(0)
awk '{
    if($7 ~ "version" )
        printf("%s %s\n",$7,$8)
}' nowcoder.txt | sed 's/version/serverVersion/'
awk '{
    if($7 ~ "number" )
        printf("%s %s\n",$7,$8)
}' nowcoder.txt | sed 's/number/serverName/'
awk '{
    if($7 ~ "Name" )
        printf("%s\n",$7)
}' nowcoder.txt | sed 's/Name/osName/' | sed 's/,//'
awk '{
    if($9 ~ "Version" )
        printf("%s\n",$9)
}' nowcoder.txt | sed 's/Version/osVersion/'

发表于 2022-01-29 13:41:25 回复(0)
awk -F "[:,]" '{
    if($0~"Server version"){
        print "serverVersion:" $4;
    }
    if($0~"Server number"){
        print "serverName:" $4;
    }
    if($0~"OS Name"){
        print "osName:" $4;
    }
    if($0~"OS Version"){
        print "osVersion:" $6
    }
}'

发表于 2021-12-16 13:18:48 回复(2)
echo "serverVersion:$(grep -aPo '(?<=Server\ version:).*' nowcoder.txt )"
echo "serverName:$(grep -aPo '(?<=Server\ number:).*' nowcoder.txt )"
echo "osName:$(grep -aPo '(?<=OS\ Name:).*' nowcoder.txt | awk -F, '{print $1}')"
echo "osVersion:$(grep -aPo '(?<=OS\ Version:).*' nowcoder.txt )"

发表于 2021-12-08 10:44:03 回复(0)
纯awk
awk '{
    if ($0 ~ /Server version/) {
        sub(/.*:/, "", $0)
        printf("serverVersion:%s\n", $0)
        next
    }
    if ($0 ~ /Server number/) {
        sub(/.*:/, "", $0)
        printf("serverName:%s\n", $0)
        next
    }
    if ($0 ~ /OS Version/) {
        sub(/.+Name:/, "", $0)
        t=$0
        sub(/,.*/, "", $0)
        sub(/.*:/, "", t)
        printf("osName:%s\nosVersion:%s", $0, t)
        exit
    }
}'


发表于 2021-11-24 15:27:07 回复(0)