shell 模拟二维数组解析配置文件

前几日项目组内出shell OJ题进行练习, 题目大概为:

现有配置文件conf.ini如下,编写shell,输入title和key,输出其值,

如输入FIFO1 a1 ,则输出11

#this is a config file

[FIFO1]
a1=11 b1=12 c1=13

[FIFO2]
a2=21 b2=22 c2=23

[FIFO3]
a3=31 b3=32 c3=33

恰因这几日内在学习数组的用法,故使用shell来模拟二维数组,现博客之,以飨同学,共研讨。

注:本解法未考虑性能,实现技巧等,只在于实验模拟二维数组。

#!/bin/bash

put_array(){
    cat conf.ini | egrep -v "^[[:blank:]]*#|^[[:blank:]]*$" |sed ‘s/#.*//g‘  >file_$$

    while read line
    do
        if echo $line | grep -qs "\[" ;then
            title=$(echo $line | grep -oP ‘(?<=\[)\w*(?=\])‘)
        else
            typeset integer index=0
            key_val=($(echo $line|xargs -d =))
            for i in ${key_val[*]}
            do
                let index=index+1
                if [ $(echo "$index%2"|bc) -ne 0 ];then
                    key=$i
                else
                    value=$i
                    result[$title,$key]=$value
                fi
            done
        fi

    done  <file_$$
    rm file_$$
}

get_array()
{
    in_title=$1
    in_key=$2

    for i in ${!result[*]}
    do
        [ "$i" == "$in_title,$in_key" ] && echo ${result[$i]}
    done
}

if [ $# -ne 2 ];then
    echo "input num error"
    exit 1
fi

typeset -A result
put_array
get_array $1 $2
时间: 2024-12-20 13:02:09

shell 模拟二维数组解析配置文件的相关文章

axis2生成webservice服务端返回String[]和String[][]一维数组和二维数组解析

环境:用axis2生成服务端,用aixs做客户端 1:直接返回String[]: public String[] testArr(String name) { String[] ret=new String[]{"一二三四五","上山打老虎",name}; return ret; } 发布后,wsdl为: 而普通返回String方法的格式为: 可以看到,返回String[]比返回String的响应中多了一个参数maxOccurs="unbounded&qu

【二维数组内存申请】

前要:内存申请与释放 头文件:#include <stdlib.h> 申请: malloc(配置内存空间) 相关函数 calloc,free,realloc,brk函数原型 void * malloc(size_t size);一般使用时会将void改为自定义型如: double **pd=NULL; pd =(double **)malloc( sizeof(double *)*n); for(int i=0;i<n;i++) pd[i]=(double *)malloc(n*size

用vector代替实现二维数组

vector可以用来模拟数组,当然也可以用来模拟二维数组: 定义如:vector<int>a[100];   相当于定义了一个100行的数组,当每行的大小是不确定的 模板应用如下: #include <stdio.h> #include <vector> #include <algorithm> using namespace std; int main() { vector<int>a[100]; vector<int>::iter

一句话动态开辟二维数组

#include<iostream> using namespace std; //动态开辟int p[4][5]数组 void main() { //为了验证正确性,我们先把开辟的一维数组赋值给 pp int *pp=new int[20]; int i=0,j=0; for(i=0;i<20;i++)//为一维数组中每一个元素赋值,并输出该元素地址 { pp[i]=i; cout<<&(pp[i])<<" ";//即 pp+i }

动态内存分配连续内存空间的二维数组

可以直接使用一维数组来模拟二维数组,下面的代码就是在此基础上,用一个二级指针指向一维数组的相应地方,详见代码 #include <stdio.h> #include <malloc.h> int main() { int row,col,i,j,n=0; row=col=3; //malloc连续内存的二维数组 int **arr=(int**)malloc(row*sizeof(int*));//分配二维数组 arr[0]=(int*)malloc(row*col*sizeof(

C语言动态分配二维数组内存

C语言内存管理主要包括malloc().remalloc().free()三个函数. malloc原型 extern void *malloc(unsigned int num_bytes); m行n列的 二维数组的分配,主要有三种方法: 一.分配一个长度为m的二级指针,指针的指向的内容分别指向一个长度为n的一位数组 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h>

jquery解析php通过ajax传过来的json二维数组对象

ajax获得php传过来的json二维数组对象,jquery解析 php代码: <?php $news = array( '武汉'=>array(1,2,3), '广州'=>array('rain','shu','fruit'), '北京'=>array('yellow','orange','black'), '上海', '深圳' ); echo json_encode($news); 前台页面 <!DOCTYPE html> <html lang="e

SDUT OJ 图练习-BFS-从起点到目标点的最短步数 (vector二维数组模拟邻接表+bfs , *【模板】 )

图练习-BFS-从起点到目标点的最短步数 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 在古老的魔兽传说中,有两个军团,一个叫天灾,一个叫近卫.在他们所在的地域,有n个隘口,编号为1..n,某些隘口之间是有通道连接的.其中近卫军团在1号隘口,天灾军团在n号隘口.某一天,天灾军团的领袖巫妖王决定派兵攻打近卫军团,天灾军团的部队如此庞大,甚至可以填江过河.但是巫妖王不想付出不必要的代价,他想知道在不修建任何通道的前提下,部队是否

二维数组---模拟斗地主

package com.pb.demo; import java.util.Arrays; import java.util.Random; /** * 扑克牌随机发牌♠♥♣♦ 二维数组实现 * */ public class Puker { public static void main(String[] args) { // 定义数组 String[][] puker = new String[5][]; puker[0] = new String[] { "♠A", "