借助查找数组替换管道结果的最后一列

借助查找数组替换管道结果的最后一列

我已经有一个 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

相关内容