列表

详情


SHELL33. 业务分析-提取值

描述

假设我们的日志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

原站题解

Bash 解法, 执行用时: 2ms, 内存消耗: 408KB, 提交时间: 2022-01-12

echo -e "serverVersion:Apache Tomcat/8.5.15\nserverName:8.5.15.0\nosName:Windows\nosVersion:10"

Bash 解法, 执行用时: 3ms, 内存消耗: 412KB, 提交时间: 2021-12-15

echo "serverVersion:Apache Tomcat/8.5.15
serverName:8.5.15.0
osName:Windows
osVersion:10"

Bash 解法, 执行用时: 3ms, 内存消耗: 420KB, 提交时间: 2022-02-11

echo "serverVersion:Apache Tomcat/8.5.15"
echo "serverName:8.5.15.0"
echo "osName:Windows"
echo "osVersion:10"

Bash 解法, 执行用时: 3ms, 内存消耗: 420KB, 提交时间: 2022-01-11

echo 'serverVersion:Apache Tomcat/8.5.15
serverName:8.5.15.0
osName:Windows
osVersion:10'

Bash 解法, 执行用时: 3ms, 内存消耗: 532KB, 提交时间: 2022-01-27

#! /usr/bin/env bash

########################################################
#
#
########################################################
function solution_1() {
    local array=""
    local old_ifs=${IFS}
    local str=""
    while read line; do
        IFS=":"
        array=(${line})
        if [[ "${line}" = *version* ]]; then
            echo "serverVersion:${array[3]}"
        fi
        
        if [[ "${line}" = *number* ]]; then
            echo "serverName:${array[3]}"
        fi
        
        if [[ "${line}" = *OS* ]]; then
            IFS=","
            local arr=(${array[3]})
            echo "osName:${arr[0]}"
            echo "osVersion:${array[4]}"
            IFS="${old_ifs}"
            return 0
        fi
        IFS="${old_ifs}"
    done < nowcoder.txt
}

########################################################
#
#
########################################################
function solution_2() {
    awk -F":"
    '{
        if($0 ~ /Server version/){
            printf("serverVersion:%s\n", $4)
        }
        if($0 ~ /Server number/){
            printf("serverName:%s\n", $4)
        }
        if($0 ~ /OS Name/){
            printf("osName:%s\n", substr($4,1,7))
        }
        if($0 ~ /OS Version/){
            printf("osVersion:%s\n", $5)
        }
    }' nowcoder.txt
}

########################################################
#
#
########################################################
function solution_3() {
    awk -v FS="[:,]" 
    '{                                                                                                             
        if($0~"Server version") print "serverVersion:", $4
    
        if($0~"Server number") print "serverName:", $4
    
        if($0~"OS Name") {
            print "osName:", $4
            print "osVersion:", $6
        }
    }' nowcoder.txt

}

########################################################
#
#
########################################################
function solution_4() {
    awk -F'[ :,]' 
    'BEGIN {
        IGNORECASE=1
    } END {
        if($9 == "version") {
            print "serverVersion:", $10, $11;
        } else if {
            ($9 == "number") print "serverName:", $10;
        } else if($9 == "name") {
             print "osName:", $10, \n, "osVersion:", $14;
        }
    }' nowcoder.txt
}


solution_1

上一题