Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Linux-Szenario - Wie kann das durch den Lesebefehl verursachte Problem der harten Codierung gelöst werden?

Linux-Szenario - Wie kann das durch den Lesebefehl verursachte Problem der harten Codierung gelöst werden?

PHP中文网
PHP中文网Original
2017-06-21 11:48:351686Durchsuche

Szenario

Wir wissen, dass der Lesebefehl den Inhalt der Datei lesen und den Inhalt Variablen zuweisen kann.

Nehmen Sie die folgende Datendatei als Beispiel.

$ cat data.txt
1 201623210021 wangzhiguo 25
2 201623210022 yangjiangbo 26
3 201623210023 yangzhen 24
4 201623210024 wangdong 23
5 201623210025 songdong 25

Die vier Spalten der obigen Datei sind Seriennummer (Index), Schülernummer (Nummer), Name (Name) und Alter (Alter). Verwenden Sie ein Shell-Skript, um die Datei zu lesen und den Wert jeder Zeile auszugeben:

$ cat read_data.sh
#!/bin/bash

cat data.txt | while read index number name age
do
    echo "index:${index}"
    echo "number:${number}"
    echo "name:${name}"
    echo "age:${age}"
    echo " "
done

Führen Sie das Skript aus und überprüfen Sie die Ergebnisse:

$ sh read_data.sh
index:1
number:201623210021
name:wangzhiguo
age:25
 
index:2
number:201623210022
name:yangjiangbo
age:26
 
index:3
number:201623210023
name:yangzhen
age:24
 
index:4
number:201623210024
name:wangdong
age:23
 
index:5
number:201623210025
name:songdong
age:25

Das frage ich mich Wenn Sie das bemerkt haben? Die Implementierungsmethode hat offensichtliche Nachteile:

  1. Der Spaltenname (Alter des Indexnummernnamens) wird explizit im Code angegeben Bedeutung jeder Spalte der Datendatei, dann müssen Sie das Skript lesen;

  2. Das Skript gibt den Namen jeder Spalte an. Wenn Sie den englischen Namen jedes Felds ändern möchten. Wenn Sie beispielsweise möchten, dass der englische Name der Seriennummer in NUMBER geändert wird, müssen Sie das Skript mit vielen Änderungen ändern Wenn sich also die Spaltenreihenfolge in der Datendatei ändert, muss das Skript trotzdem geändert werden.

  3. Wenn andere Datendateien eingelesen werden müssen Auf diese Weise muss ein neues Skript basierend auf der tatsächlichen Situation der Datendatei neu geschrieben werden.

  4. Oben Obwohl die Implementierung aufgrund der oben genannten Nachteile einfach erscheint, sollten wir sie auch optimieren .

  5. Lösung

Die grundlegende Lösung sollte

sein, die nicht von der Anzahl der Spalten, der Spaltenreihenfolge, den Spaltennamen (Bedeutungen) usw. der Datendatei selbst abhängt.

Sie können die Feldnamen der Datendatei in der ersten Zeile der Datendatei speichern. Wenn Sie eine Datendatei lesen, lesen Sie zuerst die erste Zeile der Datendatei, um eine Liste aller Feldnamen zu erhalten. Stellen Sie beim Lesen anderer Zeilen eine Eins-zu-Eins-Entsprechung zwischen dem Wert in der ersten Zeile und den Werten in her die nicht erste Reihe.

写尽可能通用的脚本Datendatei

Skript

$ cat new_data.txt
index number name age
1 201623210021 wangzhiguo 25
2 201623210022 yangjiangbo 26
3 201623210023 yangzhen 24
4 201623210024 wangdong 23
5 201623210025 songdong 25

Ergebnisse

$ cat new_read_data.sh
#!/bin/bash

# 读取文件头行,存于一个数组中
tablehead=(`head -n 1 new_data.txt`)

# 从文件第二行开始读取,按上述数组顺序读取各字段
tail -n +2 new_data.txt | while read ${tablehead[*]}
do
    # 遍历数组的下标,获取tablehead数组的对应值,以及以该值命名的变量的值
    for i in `seq 0 $((${#tablehead[@]}-1))`
    do
        temp=${tablehead[$i]}
        echo "${temp}:${!temp}"
    done
    echo ""
done

Schreiben Sie mehr Allgemeines aus Skripte können auch einige Beurteilungen und Verarbeitungen durchführen, z. B. Datendateien als Parameter übergeben, die Anzahl der Zeilen in der Datendatei überprüfen, die Anzahl der Spalten in der Datendatei überprüfen usw.

$ sh new_read_data.sh
Wissen erweitern
index:1
number:201623210021
name:wangzhiguo
age:25

index:2
number:201623210022
name:yangjiangbo
age:26

index:3
number:201623210023
name:yangzhen
age:24

index:4
number:201623210024
name:wangdong
age:23

index:5
number:201623210025
name:songdong
age:25

Aus Sicht der Skriptverbesserung ist es etwas komplizierter als das Originalskript, aber vielseitiger.

Wenn Ihnen das Lesen von Skripten schwerfällt, können Sie gezielt vor allem die folgenden Wissenspunkte erlernen:


Array-bezogenes Wissen: Array-Länge, Array-Inhalt, Array Elemente usw.

  • Der Unterschied zwischen den Variablen

    und
  • ${abc}

Das obige ist der detaillierte Inhalt vonLinux-Szenario - Wie kann das durch den Lesebefehl verursachte Problem der harten Codierung gelöst werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn