我已经有一个 shell 命令,它创建这样的行(来自长 ss -an....|...|...):
5 10.1.1.20 3307 (Nb IP port)
我有一个 echo 命令来模拟答案:
echo -e "5 10.1.1.20 3307\n25 10.1.1.30 3307\n5 10.1.1.20 3308"
我有一个数组:
declare -A dbArray
dbArray[3306]="mysql"
dbArray[3307]="mysql_test_db"
dbArray[3308]="mysql_other_db"
我想要以下命令:
echo -e "5 10.1.1.20 3307\n25 10.1.1.30 3307\n5 10.1.1.20 3308" | do_something
回来
5 10.1.1.20 3307 mysql_test_db
25 10.1.1.30 3307 mysql_test_db
5 10.1.1.20 3308 mysql_other_db
通过从输入数据中获取端口号(例如:3307)并获取数组的内容(在本例中为 mysql_test_db)。
我知道如何用某些东西替换端口号,以及如何管理数组...但我无法回答如何提取端口号以在数组中“查找”的问题(所有这些都在管道中)。
我认为这是一个有趣的挑战,但对我来说太难了。
如果有人可以帮忙...
我在 Redhat 7 上,使用 bash 4.2.46
基督教
答案1
do_something
可能是一个bash脚本
#!/usr/bin/env bash
declare -A dbArray
dbArray[3306]="mysql"
dbArray[3307]="mysql_test_db"
dbArray[3308]="mysql_other_db"
while read -a args ; do
echo ${args[0]} ${args[1]} ${args[2]} ${dbArray[${args[2]}]}
done