パイプライン結果の最後の列をルックアップ配列の助けを借りて置き換える

パイプライン結果の最後の列をルックアップ配列の助けを借りて置き換える

私はすでに次のような行を生成するシェルコマンドを持っています(from long 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)の内容を取得します。

ポート番号を何かに置き換える方法と配列を管理する方法を知っていますが...配列(すべてのパイプラインで)から「照会」するためにポート番号を抽出する方法についての質問には答えられません。 。

面白い挑戦だと思ったけど僕にとってはとても難しかった。

誰でも助けることができれば...

私はbash 4.2.46を使ってRedhat 7を使っています。

キリスト教

答え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

関連情報