Nous savons que la commande read peut lire le contenu du fichier et attribuer le contenu à des variables.
Prenons le fichier de données suivant comme exemple.
$ cat data.txt
1 201623210021 wangzhiguo 25 2 201623210022 yangjiangbo 26 3 201623210023 yangzhen 24 4 201623210024 wangdong 23 5 201623210025 songdong 25
Les quatre colonnes du fichier ci-dessus sont le numéro de série (index), le numéro d'étudiant (numéro), le nom (nom) et l'âge (âge). Utilisez un script shell pour lire le fichier et afficher la valeur de chaque ligne :
$ 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
Exécutez le script et vérifiez les résultats :
$ 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
Je me demande si vous avez remarqué cela ? La méthode d'implémentation présente des inconvénients évidents :
Le nom de la colonne (lire le nom du numéro d'index age) est explicitement spécifié dans le code. signification de chaque colonne du fichier de données, alors Vous devez lire le script
Le script précise le nom de chaque colonne Si vous souhaitez modifier le nom anglais de chaque champ (. par exemple, si vous souhaitez que le nom anglais du numéro de série soit remplacé par NUMBER
), vous devez le modifier, avec de nombreuses modifications
Le script lit le. fichier de données dans un certain ordre, donc si l'ordre des colonnes dans le fichier de données change, le script doit encore être modifié
S'il y a d'autres fichiers de données qui doivent être lus ; de cette façon, un nouveau script doit être réécrit en fonction de la situation réelle du fichier de données
Ci-dessus Bien que la mise en œuvre semble simple, sur la base des inconvénients ci-dessus, nous devrions également l'optimiser ; .
La solution fondamentale devrait être 写尽可能通用的脚本
, qui ne dépend pas du nombre de colonnes, de l'ordre des colonnes, des noms de colonnes (significations), etc. du fichier de données lui-même.
Vous pouvez stocker les noms de champs du fichier de données dans la première ligne du fichier de données. Lors de la lecture d'un fichier de données, lisez d'abord la première ligne du fichier de données pour obtenir une liste de chaque nom de champ ; lors de la lecture d'autres lignes, faites une correspondance biunivoque entre la valeur de la première ligne et les valeurs de la non-première rangée.
Fichier de données
$ 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
Script
$ 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
Résultats
$ sh new_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
Écrire plus général les scripts peuvent également effectuer du jugement et du traitement, comme transmettre des fichiers de données en tant que paramètres, vérifier le nombre de lignes dans le fichier de données, vérifier le nombre de colonnes dans le fichier de données, etc.
Du point de vue de l'amélioration du script, il est légèrement plus compliqué que le script original, mais plus polyvalent.
Si vous avez des difficultés à lire des scripts, vous pouvez apprendre de manière ciblée, notamment les points de connaissances suivants :
Connaissances liées aux tableaux : longueur du tableau, contenu du tableau, tableau éléments, etc.
La différence entre les variables ${abc}
et ${!abc}
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!