Автор Тема: Малко помощ със sed/awk  (Прочетена 1466 пъти)

zeridon

  • Killmode enabled
  • Administrator
  • Напреднали
  • *****
  • Публикации: 1398
  • Distribution: Debian/Ubuntu
  • Window Manager: console/Gnome
  • BOfH
    • Профил
    • WWW
Малко помощ със sed/awk
« -: Aug 13, 2005, 15:56 »
Здравейте компания
 опитвам се да напиша скрипт който да ми парсва изхода от smbstatus и да ми го представя в по удобна форма
Примерен код

$ smbstatus
Samba version 3.0.14a
PID     Username      Group         Machine
-------------------------------------------------------------------

Service      pid     machine       Connected at
-------------------------------------------------------
ilio         19487   192.168.3.188  Sat Aug 13 10:36:06 2005

Locked files:
Pid    DenyMode   Access      R/W        Oplock           Name
--------------------------------------------------------------
19487  DENY_WRITE 0x20089     RDONLY     NONE   /pyt/file interval ext


искам да получа нещо подобно на
Примерен код

[Share]          [IP]                  [open file]
ilio     192.168.3.188       /pyt/file interval ext


За момента имам следното
Примерен код

#!/bin/bash
#
# script simulating fsmgmt.msc functionality (partly)
# author: vladimir vitkov vvitkov [at] gmail [dot] com
# version: 0.02
# Changelog
# v0.02 - Added Open files listing
# v0.01 - Initial
# Licence: GPL V2.0 or later

echo "[SHARE]      [IP]                           [OPEN FILE]"
for i in `smbstatus -L | awk '{print $1}' | grep [0-9] | sort | uniq`; do
# Share and IP
        smbstatus -S | \
        grep $i      | \
        awk '{ print $1 " " $3}'
# open files ... buggy
        smbstatus -L | \
        grep $i      | \
#        tr -s " "    | \
        cut -c 57-
#       sort         | \
#       uniq         | \
#       awk '{
#               for(numb=6;numb<(NF-4);numb++) ofile=ofile $numb " "
#               print ofile
#            }'
done


Смятам си личи как съм експериментирал. Пробвах и с cut -d"/" -f2- обаче така остава малко боклук след отворения файл

Ще съм благодарен за всяка помощ.
Активен

Внмимавай имам клещи за кабел
http://www.netsecad.com/
http://theregister.co.uk/odds/bofh/

  • Гост
Малко помощ със sed/awk
« Отговор #1 -: Aug 15, 2005, 10:01 »
по-скоро разгледай кода на smbstatus и си напиши това което ти трябва.

smbstatus е една от малкото програми, която е безполезна при потокова обработка.
Активен

zeridon

  • Killmode enabled
  • Administrator
  • Напреднали
  • *****
  • Публикации: 1398
  • Distribution: Debian/Ubuntu
  • Window Manager: console/Gnome
  • BOfH
    • Профил
    • WWW
Малко помощ със sed/awk
« Отговор #2 -: Aug 15, 2005, 10:58 »
В какъв смисъл кода ... да я разкоствам и да си я пренапиша ... не мерси мисля ми се излишен труд. В момента имам някакво действащо решение с cut  което ми върши работа
Активен

Внмимавай имам клещи за кабел
http://www.netsecad.com/
http://theregister.co.uk/odds/bofh/

sdr

  • Напреднали
  • *****
  • Публикации: 655
    • Профил
Малко помощ със sed/awk
« Отговор #3 -: Aug 15, 2005, 11:19 »
Програмките от проекта samba са прилично написани и с малко гледане се пачват сравнително лесно, а готиното е че хората са отзивчиви и приемат сравнително лесно пачове стига да са чисти. По този начин аз успях да вкарам -g на smbclient Пробвай не е толкова страшно колкото изглежда
Активен

vic_semionov

  • Напреднали
  • *****
  • Публикации: 144
    • Профил
    • WWW
Малко помощ със sed/awk
« Отговор #4 -: Aug 15, 2005, 14:56 »
Примерен код

#! /bin/sh

echo '[Share]        [IP]                [File]';
smbstatus | awk ' \
/^Service      pid     machine       Connected at$/ \
{ \
 d=1; \
 rec=NR+2; \
} \
\
(d==1 && NR>=rec) \
{ \
 if (NF==0) \
 { \
  d=2; \
  rec=NR+4; \
 } \
 else \
 { \
  n++; \
  svc[n]=$1; \
  pid[n]=$2; \
  ip[n]=$3; \
 } \
} \
\
(d==2 && NR>=rec) \
{ \
 for (i=1;i<=n;i++) \
  if ($1==pid[i]) \
  { \
   printf("%s        %s       ",svc[i],ip[i]); \
   for (j=6;j<=NF;j++) printf(" %s",$j); \
    print ""; \
  } \
} \
'


Нещо става много гаден индента като го копирам тука, но това е '<img'>
Активен

zeridon

  • Killmode enabled
  • Administrator
  • Напреднали
  • *****
  • Публикации: 1398
  • Distribution: Debian/Ubuntu
  • Window Manager: console/Gnome
  • BOfH
    • Профил
    • WWW
Малко помощ със sed/awk
« Отговор #5 -: Aug 16, 2005, 00:21 »
мерси vic_semionov но това вече го получих като ефект. Идеята ми беше да се изхвърли боклука след отворения файл. (датата и часа)

@sdr: ми ще се заровя тогаз. Тъкмо имам и един друг проект който ще се реализира добре с вграждане на libsmbclient. (още една причинка)
Активен

Внмимавай имам клещи за кабел
http://www.netsecad.com/
http://theregister.co.uk/odds/bofh/

vic_semionov

  • Напреднали
  • *****
  • Публикации: 144
    • Профил
    • WWW
Малко помощ със sed/awk
« Отговор #6 -: Aug 16, 2005, 14:59 »
Цитат (zeridon @ Авг. 16 2005,01:21)
мерси vic_semionov но това вече го получих като ефект. Идеята ми беше да се изхвърли боклука след отворения файл. (датата и часа)

Еми ок, както искаш. Аз ти предложих нещо което работи точно както ти трябваше, и което работи само с awk, вместо awk, grep, sort, uniq, cut, tr. Но явно за теб е по-важно автора да си ти.
Активен

zeridon

  • Killmode enabled
  • Administrator
  • Напреднали
  • *****
  • Публикации: 1398
  • Distribution: Debian/Ubuntu
  • Window Manager: console/Gnome
  • BOfH
    • Профил
    • WWW
Малко помощ със sed/awk
« Отговор #7 -: Aug 16, 2005, 17:49 »
Сорка нямах за цел да те обиждам.
Просто си нямам идея от възможностите на awk. Сега в последствие като го загледах скрипта си е доста елегантен, и ще ми послужи като някаква база за изучаване на awk.
Активен

Внмимавай имам клещи за кабел
http://www.netsecad.com/
http://theregister.co.uk/odds/bofh/