日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

bash mysql 循环输出_Bash实用技巧:同时循环两个列表

發布時間:2025/3/15 数据库 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bash mysql 循环输出_Bash实用技巧:同时循环两个列表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

摘要: 你會學到一種原創的同時循環兩個列表的方法。類似于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 1 5) seq 129 133) | while read host ip; do echo "vm$host: 172.16.116.$ip"; donevm1:172.16.116.129vm2:172.16.116.130vm3:172.16.116.131vm4:172.16.116.132vm5:172.16.116.133

詳情:

在實際應用中,經常需要我們輸入對應的兩個列表,比如主機名和IP:

vm110 172.18.11.129vm111172.18.11.130...

如果有很多的話,使用awk處理一個臨時文件,然后使用while read來循環是不錯的(例如從Excel里面拷貝成文本文件,然后用awk提取相應的列到一個文件):

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

但是,有沒有能直接在命令行上生成這些列表并循環的方法呢?因為我更喜歡用for i in vm{110..120}; do echo $i; done這種方式來循環列表,但是這種方式只支持一個列表,怎么找到對應的另一個列表呢?

直接google,就會發現沒有什么好的方法(以下均來自StackOverflow):

1、有的直接使用bash的數組甚至hash表,都是較新的版本才有,然后使用數字index來循環。這種方法一點也不直觀:

list1="a b c"list2="1 2 3"array1=($list1)

array2=($list2)

count=${#array1[@]}for i in `seq 1$count`do

echo ${array1[$i-1]} ${array2[$i-1]}done

誰也不想寫類似${#array1[@]}這樣的復雜表達,因為我們不是在編程,而是在輸入一條命令。

2、有的使用了各種正則表達式命令,我一眼看不出來什么意思,沒人會為了循環兩個列表,去專門寫一個腳本文件:

#!/bin/shlist1="1 2 3"list2="a b c"

while [ -n "$list1"]dohead1=`echo "$list1" | cut -d ' ' -f 1`

list1=`echo "$list1" | sed 's/[^ ]* *\(.*\)$/\1/'`

head2=`echo "$list2" | cut -d ' ' -f 1`

list2=`echo "$list2" | sed 's/[^ ]* *\(.*\)$/\1/'`echo$head1 $head2done

還有其他幾種,有興趣的可以去看看,http://stackoverflow.com/questions/546817/iterating-over-two-lists-in-parallel-in-bin-sh。

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

list1="aaa1 aaa2 aaa3"list2="bbb1 bbb2 bbb3"tmpfile1=$( mktemp /tmp/list.XXXXXXXXXX ) || exit 1tmpfile2=$( mktemp /tmp/list.XXXXXXXXXX ) || exit 1

echo $list1 | tr ' ' '\n' >$tmpfile1echo $list2 | tr ' ' '\n' >$tmpfile2

paste $tmpfile1 $tmpfile2rm --force $tmpfile1 $tmpfile2

這種方法創建了兩個臨時文件,好像還不如前面的方法,但是在我看來,這很有啟發性:他使用了paste來結合兩個列表,這是linux下原生的合并列表命令,相當于其他語言的zip。

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

paste echo vm{1..5} | tr ' ' '\n') echo 172.16.116.{129..133} | tr ' ' '\n') | while read host ip; do echo $host: $ip; done

其中vm{1..5}會產生“vm1 vm2 vm3 vm4 vm5”,以空格分隔,而paste是把兩個列文件合并成一個,所以必須把空格替換成換行,這就是tr做的事。明顯使用tr很不好,增加了命令的復雜度。

另外

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

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

這個命令可以循環2個及以上同等長度的列表,而且非常直觀。就是開頭提到的方法。

本文原創發布php中文網,轉載請注明出處,感謝您的尊重!

總結

以上是生活随笔為你收集整理的bash mysql 循环输出_Bash实用技巧:同时循环两个列表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: av黄色免费在线观看 | 撸久久| 爽爽影院在线免费观看 | 黄色aaaaa| 亚洲一区二区视频网站 | 有色影院 | 日本熟女一区二区 | 日本波多野结衣在线 | 日本黄在线观看 | 色一情一区二区三区 | 开心六月婷婷 | 超碰日本 | 亚洲香蕉在线观看 | 午夜精品久久 | 在线免费看mv的网站入口 | xxxx亚洲| 可以免费看av | 精品女同一区二区 | 日本va欧美va欧美va精品 | 久热99| 丰满熟女人妻一区二区三区 | 欧美大片免费观看网址 | 亚洲高清毛片 | 成年人免费网 | 懂色av中文字幕 | 中文字幕日韩一区 | 国产xxxx孕妇 | 涩涩屋视频| 国产精品毛片在线 | 九色国产在线 | 亚洲欧美日本在线观看 | 亚洲免费色视频 | 国产在线视频网 | 久久人人精品 | 在线免费黄色av | 色婷婷激情网 | 亚洲熟女一区二区 | 成人污 | 黄色片视频免费看 | 久久综合第一页 | 五月av| 日韩综合一区二区 | 婷色 | 性欧美17一18内谢 | 乱h伦h女h在线视频 99999视频 | 国产无精乱码一区二区三区 | 亚洲精品国产精品国自产在线 | 69精品无码成人久久久久久 | 97超碰精品 | 诱惑の诱惑筱田优在线播放 | 亚洲不卡一区二区三区 | 久久高清精品 | 国产精品亚洲天堂 | 国产又爽又色 | 国产成人av一区二区三区不卡 | 成人免费黄色av | 国产精品久久久久aaaa | 国产精品麻豆视频 | 亚洲涩情 | 91蜜桃臀久久一区二区 | 激情拍拍| 色狠狠一区 | 最近中文字幕在线观看视频 | 国产白丝一区二区三区 | 99国产精品欲| 激情图片网站 | 成人在线观看一区 | 国产亚洲一区二区三区在线观看 | 中文成人无字幕乱码精品区 | 免费看女人裸体 | 黑人又大又粗又长 | 三级精品在线观看 | 毛茸茸亚洲孕妇孕交片 | 波多野结衣在线电影 | 欧美日韩国 | 久草五月天 | 精品九九九九 | 岛国视频一区 | 黄色片免费在线观看 | 在线免费观看a视频 | 黄色精彩视频 | 朝鲜黄色片 | 日韩一区二区在线播放 | 亚洲自拍中文字幕 | 中文激情网| 十大污网站 | 成人91免费 | 一本色道久久综合亚洲精品按摩 | 精品久久影视 | 亚洲欧美变态另类丝袜第一区 | 一区二区三区伦理片 | 日韩欧av| 亚洲天堂久 | 国产裸体永久免费视频网站 | 在线看福利影 | 国产精品xxxx | 国产在线三区 | 懂色av蜜臀av粉嫩av喷吹 | 无码国模国产在线观看 |