Maison base de données tutoriel mysql Bash实用技巧:同时循环两个列表

Bash实用技巧:同时循环两个列表

Jun 07, 2016 pm 03:10 PM
bash 列表 实用技巧 循环 résumé

摘要: 你会学到一种原创的同时循环两个列表的方法。类似于Python或者Haskell的zip函数,非常简洁直观,效果如下: $ paste ( seq 1 5 ) ( seq 129 133 ) | while read host ip; do echo " vm$host: 172.16.116.$ip " ; done vm1: 172.16 . 116.129 vm2: 172

摘要:

你会学到一种原创的同时循环两个列表的方法。类似于Python或者Haskell的zip函数,非常简洁直观,效果如下:

$ paste seq <span>1</span> <span>5</span>) seq <span>129</span> <span>133</span>) | <span>while</span> read host ip; <span>do</span> <span>echo</span> <span>"</span><span>vm$host: 172.16.116.$ip</span><span>"</span>; <span>done</span><span>

vm1: </span><span>172.16</span>.<span>116.129</span><span>
vm2: </span><span>172.16</span>.<span>116.130</span><span>
vm3: </span><span>172.16</span>.<span>116.131</span><span>
vm4: </span><span>172.16</span>.<span>116.132</span><span>
vm5: </span><span>172.16</span>.<span>116.133</span>
Copier après la connexion

详情:

在实际应用中,经常需要我们输入对应的两个列表,比如主机名和IP:

vm110 <span>172.18</span>.<span>11.129</span><span>

vm111 </span><span>172.18</span>.<span>11.130</span><span>

...</span>
Copier après la connexion

如果有很多的话,使用awk处理一个临时文件,然后使用while read来循环是不错的(例如从Excel里面拷贝成文本文件,然后用awk提取相应的列到一个文件):

<span>awk</span> <span>'</span><span>{print $1 $3}</span><span>'</span> orig.txt | <span>while</span> read host ip; <span>do</span> <span>echo</span> $host : $ip; <span>done</span> 

<p>但是,有没有能直接在命令行上生成这些列表并循环的方法呢?因为我更喜欢用for i in vm{110..120}; do echo $i; done这种方式来循环列表,但是这种方式只支持一个列表,怎么找到对应的另一个列表呢?</p>
<p>直接google,就会发现没有什么好的方法(以下均来自StackOverflow):</p>
<p>1、有的直接使用bash的数组甚至hash表,都是较新的版本才有,然后使用数字index来循环。这种方法一点也不直观:</p>
<p>
</p><pre class="brush:php;toolbar:false">list1=<span>"</span><span>a b c</span><span>"</span><span>
list2</span>=<span>"</span><span>1 2 3</span><span>"</span><span>
array1</span>=<span>($list1)
array2</span>=<span>($list2)

count</span>=<span>${#array1[@]}
</span><span>for</span> i <span>in</span> `<span>seq</span> <span>1</span><span> $count`
</span><span>do</span>
    <span>echo</span> ${array1[$i-<span>1</span>]} ${array2[$i-<span>1</span><span>]}
</span><span>done</span>
Copier après la connexion

谁也不想写类似${#array1[@]}这样的复杂表达,因为我们不是在编程,而是在输入一条命令。

2、有的使用了各种正则表达式命令,我一眼看不出来什么意思,没人会为了循环两个列表,去专门写一个脚本文件:

#!/bin/<span>sh</span><span>
list1</span>=<span>"</span><span>1 2 3</span><span>"</span><span>
list2</span>=<span>"</span><span>a b c</span><span>"</span>
<span>while</span> [ -n <span>"</span><span>$list1</span><span>"</span><span> ]
</span><span>do</span><span>
    head1</span>=`<span>echo</span> <span>"</span><span>$list1</span><span>"</span> | <span>cut</span> -d <span>'</span> <span>'</span> -f <span>1</span><span>`
    list1</span>=`<span>echo</span> <span>"</span><span>$list1</span><span>"</span> | <span>sed</span> <span>'</span><span>s/[^ ]* *\(.*\)$/\1/</span><span>'</span><span>`
    head2</span>=`<span>echo</span> <span>"</span><span>$list2</span><span>"</span> | <span>cut</span> -d <span>'</span> <span>'</span> -f <span>1</span><span>`
    list2</span>=`<span>echo</span> <span>"</span><span>$list2</span><span>"</span> | <span>sed</span> <span>'</span><span>s/[^ ]* *\(.*\)$/\1/</span><span>'</span><span>`
    </span><span>echo</span><span> $head1 $head2
</span><span>done</span>
Copier après la connexion

还有其他几种,有兴趣的可以去看看,http://stackoverflow.com/questions/546817/iterating-over-two-lists-in-parallel-in-bin-sh。

但是有一种方法提醒了我:

list1=<span>"</span><span>aaa1 aaa2 aaa3</span><span>"</span><span>
list2</span>=<span>"</span><span>bbb1 bbb2 bbb3</span><span>"</span><span>

tmpfile1</span>=$( <span>mktemp</span> /tmp/list.XXXXXXXXXX ) || exit <span>1</span><span>
tmpfile2</span>=$( <span>mktemp</span> /tmp/list.XXXXXXXXXX ) || exit <span>1</span>

<span>echo</span> $list1 | <span>tr</span> <span>'</span> <span>'</span> <span>'</span><span>\n</span><span>'</span>  ><span> $tmpfile1
</span><span>echo</span> $list2 | <span>tr</span> <span>'</span> <span>'</span> <span>'</span><span>\n</span><span>'</span>  ><span> $tmpfile2

paste  $tmpfile1  $tmpfile2

</span><span>rm</span> --force $tmpfile1  $tmpfile2
Copier après la connexion

这种方法创建了两个临时文件,好像还不如前面的方法,但是在我看来,这很有启发性:他使用了paste来结合两个列表,这是linux下原生的合并列表命令,相当于其他语言的zip。

另外,临时文件也可以避免,因此我想出了以下的方法(并不推荐):

paste echo vm{<span>1</span>..<span>5</span>} | <span>tr</span> <span>'</span> <span>'</span> <span>'</span><span>\n</span><span>'</span>) echo <span>172.16</span>.<span>116</span>.{<span>129</span>..<span>133</span>} | <span>tr</span> <span>'</span> <span>'</span> <span>'</span><span>\n</span><span>'</span>) | <span>while</span> read host ip; <span>do</span> <span>echo</span> $host: $ip; <span>done</span>
Copier après la connexion

其中vm{1..5}会产生“vm1 vm2 vm3 vm4 vm5”,以空格分隔,而paste是把两个列文件合并成一个,所以必须把空格替换成换行,这就是tr做的事。明显使用tr很不好,增加了命令的复杂度。

另外

于是我想到了seq,好像可以指定分隔符,一查文档,居然默认就是换行,于是命令得以大幅简化:

paste seq <span>1</span> <span>5</span>) seq <span>129</span> <span>133</span>) | <span>while</span> read host ip; <span>do</span> <span>echo</span> <span>"</span><span>vm$host: 172.16.116.$ip</span><span>"</span>; <span>done</span><span><br></span>
Copier après la connexion

这个命令可以循环2个及以上同等长度的列表,而且非常直观。就是开头提到的方法。

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment supprimer les crochets d'une liste en utilisant Python Comment supprimer les crochets d'une liste en utilisant Python Sep 05, 2023 pm 07:05 PM

Python est un logiciel très utile qui peut être utilisé à de nombreuses fins différentes selon les besoins. Python peut être utilisé dans le développement Web, la science des données, l'apprentissage automatique et de nombreux autres domaines nécessitant une automatisation. Il possède de nombreuses fonctionnalités différentes qui nous aident à effectuer ces tâches. Les listes Python sont l'une des fonctionnalités très utiles de Python. Comme son nom l'indique, une liste contient toutes les données que vous souhaitez stocker. Il s’agit essentiellement d’un ensemble de différents types d’informations. Différentes façons de supprimer les crochets Souvent, les utilisateurs se retrouvent dans une situation où les éléments de la liste sont affichés entre crochets. Dans cet article, nous détaillerons comment supprimer ces crochets pour avoir une meilleure vue de votre annonce. L'un des moyens les plus simples de supprimer les parenthèses dans les chaînes et les fonctions de remplacement consiste à

Dépannage des erreurs Tomcat 404 : conseils rapides et pratiques Dépannage des erreurs Tomcat 404 : conseils rapides et pratiques Dec 28, 2023 am 08:05 AM

Conseils pratiques pour résoudre rapidement les erreurs Tomcat404 Tomcat est un serveur d'applications JavaWeb couramment utilisé et est souvent utilisé lors du développement et du déploiement d'applications JavaWeb. Cependant, nous pouvons parfois rencontrer une erreur 404 de la part de Tomcat, ce qui signifie que Tomcat ne trouve pas la ressource demandée. Cette erreur peut être causée par plusieurs facteurs, mais dans cet article, nous aborderons quelques solutions et conseils courants pour vous aider à résoudre rapidement les erreurs Tomcat 404. Vérifier le chemin de l'URL

Comment compter le nombre d'éléments dans une liste à l'aide de la fonction count() de Python Comment compter le nombre d'éléments dans une liste à l'aide de la fonction count() de Python Nov 18, 2023 pm 02:53 PM

Comment utiliser la fonction count() de Python pour compter le nombre d'éléments dans une liste nécessite des exemples de code spécifiques. En tant que langage de programmation puissant et facile à apprendre, Python fournit de nombreuses fonctions intégrées pour gérer différentes structures de données. L'une d'elles est la fonction count(), qui peut être utilisée pour compter le nombre d'éléments dans une liste. Dans cet article, nous expliquerons en détail comment utiliser la fonction count() et fournirons des exemples de code spécifiques. La fonction count() est une fonction intégrée de Python, utilisée pour calculer un certain

Comment créer une liste de courses dans l'application de rappels iOS 17 sur iPhone Comment créer une liste de courses dans l'application de rappels iOS 17 sur iPhone Sep 21, 2023 pm 06:41 PM

Comment créer une liste d'épicerie sur iPhone sous iOS17 Créer une liste d'épicerie dans l'application Rappels est très simple. Il vous suffit d'ajouter une liste et de la remplir avec vos éléments. L'application trie automatiquement vos articles en catégories et vous pouvez même travailler avec votre partenaire ou partenaire d'appartement pour dresser une liste de ce que vous devez acheter dans le magasin. Voici les étapes complètes pour ce faire : Étape 1 : activer les rappels iCloud Aussi étrange que cela puisse paraître, Apple dit que vous devez activer les rappels d'iCloud pour créer une liste d'épicerie sur iOS17. Voici les étapes à suivre : Accédez à l'application Paramètres sur votre iPhone et appuyez sur [votre nom]. Ensuite, sélectionnez je

Comment créer une liste de courses : utilisez l'application Rappels pour iPhone Comment créer une liste de courses : utilisez l'application Rappels pour iPhone Dec 01, 2023 pm 03:37 PM

Dans iOS 17, Apple a ajouté une petite fonctionnalité de liste pratique à l'application Rappels pour vous aider lorsque vous faites vos courses. Lisez la suite pour savoir comment l'utiliser et raccourcir votre déplacement au magasin. Lorsque vous créez une liste à l'aide du nouveau type de liste « Épicerie » (appelé « Shopping » en dehors des États-Unis), vous pouvez saisir une variété d'aliments et de produits d'épicerie et les organiser automatiquement par catégorie. Cette organisation facilite la recherche de ce dont vous avez besoin à l'épicerie ou lors de vos courses. Les types de catégories disponibles dans les alertes incluent les produits, le pain et les céréales, les aliments surgelés, les collations et les bonbons, la viande, les produits laitiers, les œufs et le fromage, les produits de boulangerie, les produits de boulangerie, les produits ménagers, les soins personnels et le bien-être, ainsi que le vin, la bière et les spiritueux. Ce qui suit est créé dans iOS17

Quelle est la différence entre Del et Remove() sur les listes en Python ? Quelle est la différence entre Del et Remove() sur les listes en Python ? Sep 12, 2023 pm 04:25 PM

Avant de discuter des différences, comprenons d'abord ce que sont Del et Remove() dans les listes Python. Mot-clé Del dans une liste Python Le mot-clé del en Python est utilisé pour supprimer un ou plusieurs éléments d'une liste. Nous pouvons également supprimer tous les éléments, c'est-à-dire supprimer la liste entière. Exemple d'utilisation du mot-clé del pour supprimer des éléments d'une liste Python #CreateaListmyList=["Toyota","Benz","Audi","Bentley"]print("List="

Conseils pratiques pour résoudre efficacement les exceptions de lecture de fichiers volumineux Java Conseils pratiques pour résoudre efficacement les exceptions de lecture de fichiers volumineux Java Feb 21, 2024 am 10:54 AM

Des conseils pratiques pour résoudre efficacement les exceptions de lecture de fichiers volumineux en Java nécessitent des exemples de code spécifiques Présentation : Lors du traitement de fichiers volumineux, Java peut être confronté à des problèmes tels qu'un débordement de mémoire et une dégradation des performances. Cet article présentera plusieurs techniques pratiques pour résoudre efficacement les exceptions de lecture de fichiers volumineux Java et fournira des exemples de code spécifiques. Contexte : lors du traitement de fichiers volumineux, nous pouvons avoir besoin de lire le contenu du fichier en mémoire pour le traitement, tel que la recherche, l'analyse, l'extraction et d'autres opérations. Cependant, lorsque le fichier est volumineux, les problèmes suivants sont souvent rencontrés : Débordement de mémoire : tentative de copier l'intégralité du fichier en une seule fois.

Créez plusieurs répertoires à partir d'une liste à l'aide de Python Créez plusieurs répertoires à partir d'une liste à l'aide de Python Sep 08, 2023 am 08:21 AM

Python est devenu l'un des langages de programmation les plus populaires pour diverses applications en raison de sa simplicité et de sa polyvalence. Que vous soyez un développeur expérimenté ou que vous débutiez tout juste votre parcours de codage, Python propose une large gamme de fonctionnalités et de bibliothèques qui facilitent la gestion des tâches complexes. Dans cet article, nous explorerons un scénario pratique dans lequel Python peut nous aider en automatisant le processus de création de plusieurs répertoires basés sur une liste. En tirant parti de la puissance des modules et techniques intégrés de Python, nous pouvons gérer cette tâche efficacement sans avoir recours à une intervention manuelle. Dans ce didacticiel, nous aborderons le problème de la création de plusieurs répertoires et vous proposerons différentes façons de résoudre ce problème à l'aide de Python. À la fin de cet article, notre objectif est pour vous

See all articles