1

Hi %user%!
Я только начинаю учить python и хочу переписать свой bash скрипт на python.
Не могли бы вы мне помочь, а то я даже не знаю с какой стороны подойти к вопросу.

Код моего скрипта:

#/bin/bash
. "/etc/CFG_FULL.cfg"
 
#nmap --excludefile $pwd/db_ip_exclude.txt -sn 192.168.212.0/22 | egrep -v "Host|nmap" | awk '{print $5}' > $pwd/db_ip_test.txt
 
cd $pwd/port_up_down
#ip=192.168.213.50
while read ip
do
cat /dev/null > $pwd/port_up_down/tmp/tmp_$ip.log
#/home/user/test/port_up_down/port_status.sh $ip
cat /var/log/remote/switches.log | grep -w $ip | grep Port | awk '{ print $7 }' | sort -n | uniq >> $pwd/port_up_down/tmp/tmp_$ip.log
cat /var/log/remote/switches.log.1 | grep -w $ip | grep Port | awk '{ print $7 }' | sort -n | uniq >> $pwd/port_up_down/tmp/tmp_$ip.log
zcat /var/log/remote/switches.log.2.gz | grep " $ip " | grep Port | awk '{ print $7 }' | sort -n | uniq >> $pwd/port_up_down/tmp/tmp_$ip.log
cat $pwd/port_up_down/tmp/tmp_$ip.log | sort -n | uniq > $pwd/port_up_down/log/$ip.log
done < $pwd/db_ip_test.txt

Пока я могу только открыть файл :(

#!/usr/bin/env python
f1 = open("/var/log/remote/switches.log")
xString = f1.readlines()
nambers = len(xString)
xString = [xString.replace("\n","") for xString in xString]
for cntr in range(0,nambers):
    print (xString[cntr])
f1.close()

Буду благодарен за любую помощь!!!

UPD 0.1
Данные из файлов которые я парсю есть mysql, у меня данные syslog дублируются в базу, может будет проще брать данные от туда?
Но мне надо чтоб брались данные только за 3 месяца.
Так как в bash не очень удобно работать с базой я не рассматривал такой вариант. UPD 0.2

#!/usr/bin/env python

import MySQLdb
import string

select_sql = "SELECT `datetime`, `host`, `msg` FROM `logs` WHERE host = '{0}' and msg                           LIKE '{1}';"

db = MySQLdb.connect(host="127.0.0.1",user="root",passwd="121788",db="syslog")
cursor = db.cursor()
cursor.execute(select_sql.format('192.168.212.60','Port 22 link%'))
for k in cursor.fetchall():
    print (k[2])

вывод

как мне теперь вывести только в столбец в этой строке
пробовал:

aa = k.split()
print (aa[2])

выводит:

Traceback (most recent call last):
  File "./run_port.py", line 12, in <module>
    aa = k.split()
AttributeError: 'tuple' object has no attribute 'split'

Вот так вот заработало:

for k in cursor.fetchall():
bb = str(k[2])
aa = bb.split()
print (aa[1])

UPD 0.3 Не получается реализовать сортировку и удаление дублей из масива.
Мне нужно по аналогии с sort -n | uniq

4
  • я бы и башевый вариант переписал, у вас там безумное дублирование.
    – zb'
    16 авг 2013 в 4:29
  • Буду рад любой адекватной критике. Покажите свой вариант и если можно объясните почему ваш лучше. Интересно в чем я ошибся.
    – Izya12
    16 авг 2013 в 4:33
  • 1
    вот так: #/bin/bash . "/etc/CFG_FULL.cfg" while read ip;do (cat /var/log/remote/switches.log /var/log/remote/switches.log.1; zcat /var/log/remote/switches.log.2.gz) | grep -w $ip | grep Port | awk '{ print $7 }' | sort -nu > $pwd/port_up_down/log/$ip.log done < $pwd/db_ip_test.txt
    – zb'
    16 авг 2013 в 4:34
  • Огромное спасибо!!! Так и правда на много лучше!
    – Izya12
    16 авг 2013 в 4:36

1 ответ 1

1
"""выборка из mysql"""

import MySQLdb
select_sql = "SELECT * FROM table WHERE ip={0} and port={1};"

db = MySQLdb.connect(host="127.0.0.1",user="r",passwd="r",db="r")
cursor = db.cursor()
cursor.execute(select_sql.format('192.168.0.1','24'))
for k in cursor.fetchall():
    print k
1
  • Большое спасибо! Попробую так.
    – Izya12
    16 авг 2013 в 4:35

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.