awk
私はネットワークに接続されているデバイスに関する情報を取得するためにいくつかのciscoコマンドを使用してきました。このスクリプトは、Telnetを介して特定のデバイスに接続し、デバイスの、およびIP
(serial number
デバイスname
ID)を取得し、次のテキストファイルを生成します。
SN: FDO1129Z9ZQ
Barragan_3750
IP address: 148.228.4.197
次に、接続されたデバイスに要求し、次の2番目のファイルを生成します。
Device ID: BIOTERIO
IP address: 148.228.83.140
Interface: GigabitEthernet1/0/6
Port ID (outgoing port): GigabitEthernet0/1
SN: P7K08UR
Device ID: N7K-LAN(JAF1651ANDL)
IP address: 148.228.4.193
Interface: GigabitEthernet1/0/1
Port ID (outgoing port): Ethernet7/23
SN: H006K024
Device ID: LAB_PESADO
IP address: 148.228.131.133
Interface: GigabitEthernet1/0/11
Port ID (outgoing port): GigabitEthernet0/1
SN: FNS174002FY
Device ID: Arquitectura_Salones
IP address: 148.228.135.33
Interface: GigabitEthernet1/0/9
Port ID (outgoing port): GigabitEthernet0/49
SN: FNS14420544
Device ID: CIVIL_253
IP address: 148.228.132.256
Interface: GigabitEthernet1/0/4
Port ID (outgoing port): GigabitEthernet1/0/52
SN: H006K042
Device ID: Arquitectura
IP address: 148.228.134.456
Interface: GigabitEthernet1/0/3
Port ID (outgoing port): GigabitEthernet0/1
SN: H006K044
Device ID: ING_CIVIL
IP address: 148.228.133.234
Interface: GigabitEthernet1/0/7
Port ID (outgoing port): GigabitEthernet0/2
SN: H006K011
Device ID: ING_CIVIL_DIR
IP address: 148.228.4.987
Interface: GigabitEthernet1/0/10
Port ID (outgoing port): GigabitEthernet0/2
SN: FNS16361SW1
Device ID: Ingenieria_Posgrado
IP address: 148.228.137.343
Interface: GigabitEthernet1/0/8
Port ID (outgoing port): GigabitEthernet0/1
SN: H006K432
Device ID: Biblio_Barragan
IP address: 148.228.136.45
Interface: GigabitEthernet1/0/2
Port ID (outgoing port): GigabitEthernet0/1
SN: 00000MTC1444080D
Device ID: Electronica_Edif_3
IP address: 148.228.130.345
Interface: GigabitEthernet1/0/5
Port ID (outgoing port): GigabitEthernet0/1
SN: FNS11190FRT
MySQL
この情報をデータベースに入れる必要があるため、次の2つのテーブルを持つデータベースを作成しました。
+------------------+
| Tables_in_db_cdp |
+------------------+
| Trelaciones |
| dispositivos |
+------------------+
mysql> DESCRIBE dispositivos;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| sn | varchar(20) | NO | PRI | NULL | |
| device_id | varchar(25) | NO | | NULL | |
| ip_address | varchar(15) | NO | | NULL | |
+------------+-------------+------+-----+---------+-------+
mysql> DESCRIBE Trelaciones
-> ;
+-------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| Device_SN_O | varchar(25) | NO | | NULL | |
| Device_SN_D | varchar(25) | NO | | NULL | |
| Interface | varchar(25) | NO | | NULL | |
| Port_ID | varchar(25) | NO | | NULL | |
+-------------+-------------+------+-----+---------+----------------+
さて、このデータベースをファイル情報で埋める必要がありますが、正直に何をすべきかわかりません。スクリプトにループを作成する必要があると思いますが、それはすべてです。
助けが必要ですか?
よろしくお願いします。
更新:許可された回答コードを使用して次の結果を得ました。
Device_SN_O,Device_SN_D,Interface,Port_ID
FDO1129Z9ZJ
,P7K08UQ
,GigabitEthernet1/0/6,GigabitEthernet0/1
FDO1129Z9ZJ
,H006K022
,GigabitEthernet1/0/1,Ethernet7/23
FDO1129Z9ZJ
,FNS174002FT
,GigabitEthernet1/0/11,GigabitEthernet0/1
FDO1129Z9ZJ
,FNS14420533
,GigabitEthernet1/0/9,GigabitEthernet0/49
FDO1129Z9ZJ
,H006K021
,GigabitEthernet1/0/4,GigabitEthernet1/0/52
FDO1129Z9ZJ
,H006K083
,GigabitEthernet1/0/3,GigabitEthernet0/1
FDO1129Z9ZJ
,H006K032
,GigabitEthernet1/0/7,GigabitEthernet0/2
FDO1129Z9ZJ
,FNS16361SG0
,GigabitEthernet1/0/10,GigabitEthernet0/2
FDO1129Z9ZJ
,H006K040
,GigabitEthernet1/0/8,GigabitEthernet0/1
FDO1129Z9ZJ
,00000MTC1444080Z
,GigabitEthernet1/0/2,GigabitEthernet0/1
FDO1129Z9ZJ
,FNS11190FLE
,GigabitEthernet1/0/5,GigabitEthernet0/1
" "を使用すると、load data infile
情報が無効なフィールドに入力されます。
"writer"を使用して.cvsファイルを開くと、区切り文字と改行は正確ですが、geditを使用しないことがわかりました。
.cvsファイルを手動で編集してコンマと改行を正しく配置すると、 " load data infile
"機能は完全に機能します。
答え1
レポートを生成するのはINSERT
面倒で、簡単な方法はCSVを使用してファイルをCSVに変換し、awk
CSVmysqlimport
を使用して結果を関連テーブルにインポートすることです。
最初のテーブルの場合、変換は次のようになります。
awk '
BEGIN {
RS = "\n\n"
FS = "\n"
OFS = ","
print "sn,device_id,ip_address"
}
{
for(i=1; i<=NF; i++) {
split($i, a, ": ");
k[a[1]] = a[2]
}
print k["SN"], k["Device ID"], k["IP address"]
}' file2.txt > table1.csv
結果は次のようになります。
sn,device_id,ip_address
P7K08UR,BIOTERIO,148.228.83.140
H006K024,N7K-LAN(JAF1651ANDL),148.228.4.193
FNS174002FY,LAB_PESADO,148.228.131.133
FNS14420544,Arquitectura_Salones,148.228.135.33
H006K042,CIVIL_253,148.228.132.256
H006K044,Arquitectura,148.228.134.456
H006K011,ING_CIVIL,148.228.133.234
FNS16361SW1,ING_CIVIL_DIR,148.228.4.987
H006K432,Ingenieria_Posgrado,148.228.137.343
00000MTC1444080D,Biblio_Barragan,148.228.136.45
FNS11190FRT,Electronica_Edif_3,148.228.130.345
その後、合計がDevice_SN_O
何であるかを理解すると仮定し、2番目のテーブルに対して次のことを実行できます。Device_SN_D
awk -v orig=$(awk '$1=="SN:" {print $2}' file1.txt) '
BEGIN {
RS = "\n\n"
FS = "\n"
OFS = ","
print "Device_SN_O,Device_SN_D,Interface,Port_ID"
}
{
for(i=1; i<=NF; i++) {
split($i, a, ": ");
k[a[1]] = a[2]
}
print orig, k["SN"], k["Interface"], k["Port ID (outgoing port)"]
}' file2.txt > table2.csv
結果は次のとおりです。
Device_SN_O,Device_SN_D,Interface,Port_ID
FDO1129Z9ZQ,P7K08UR,GigabitEthernet1/0/6,GigabitEthernet0/1
FDO1129Z9ZQ,H006K024,GigabitEthernet1/0/1,Ethernet7/23
FDO1129Z9ZQ,FNS174002FY,GigabitEthernet1/0/11,GigabitEthernet0/1
FDO1129Z9ZQ,FNS14420544,GigabitEthernet1/0/9,GigabitEthernet0/49
FDO1129Z9ZQ,H006K042,GigabitEthernet1/0/4,GigabitEthernet1/0/52
FDO1129Z9ZQ,H006K044,GigabitEthernet1/0/3,GigabitEthernet0/1
FDO1129Z9ZQ,H006K011,GigabitEthernet1/0/7,GigabitEthernet0/2
FDO1129Z9ZQ,FNS16361SW1,GigabitEthernet1/0/10,GigabitEthernet0/2
FDO1129Z9ZQ,H006K432,GigabitEthernet1/0/8,GigabitEthernet0/1
FDO1129Z9ZQ,00000MTC1444080D,GigabitEthernet1/0/2,GigabitEthernet0/1
FDO1129Z9ZQ,FNS11190FRT,GigabitEthernet1/0/5,GigabitEthernet0/1
それではあなたはできます。輸入CSVファイルをMySQLにインポートします。