URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8206
[ Назад ]

Исходное сообщение
"ограничение вывода построчно"

Отправлено andreika , 09-Апр-09 17:50 
есть файл такого содержания:
=============
MAC ff:ff:ff:ff:ff:ff
MAC 0:f:3d:86:49:b3
MAC 8:0:27:9d:3c:97
MAC 0:e0:7d:a3:95:2d
MAC ff:ff:ff:ff:ff:ff
IP 192.168.2.0
IP 192.168.2.2
IP 192.168.2.18
IP 192.168.2.162
IP 192.168.2.255
=============
соответственно - маки и соответствующие им ip.можно ли ограничить размер столбца (до (wc -l)/2, например)? как fold -w, только для столбцов а не для строк.. либо каким скриптом это можно сделать, чтобы в одну строку уложиться? :) спасибо.

Содержание

Сообщения в этом обсуждении
"ограничение вывода построчно"
Отправлено ДорогойДрук , 09-Апр-09 18:34 
>[оверквотинг удален]
>MAC 0:f:3d:86:49:b3
>MAC 8:0:27:9d:3c:97
>MAC 0:e0:7d:a3:95:2d
>MAC ff:ff:ff:ff:ff:ff
>IP 192.168.2.0
>IP 192.168.2.2
>IP 192.168.2.18
>IP 192.168.2.162
>IP 192.168.2.255
>=============

Покажите, что должно получиться, из описания не совсем понятно.


"ограничение вывода построчно"
Отправлено andreika , 09-Апр-09 19:31 
>[оверквотинг удален]
>>MAC 0:e0:7d:a3:95:2d
>>MAC ff:ff:ff:ff:ff:ff
>>IP 192.168.2.0
>>IP 192.168.2.2
>>IP 192.168.2.18
>>IP 192.168.2.162
>>IP 192.168.2.255
>>=============
>
>Покажите, что должно получиться, из описания не совсем понятно.

IP: 192.168.2.0 MAC: ff:ff:ff:ff:ff:ff
IP: 192.168.2.2 MAC: 0:f:3d:86:49:b3
IP: 192.168.2.18 MAC: 8:0:27:9d:3c:97
IP: 192.168.2.162 MAC: 0:e0:7d:a3:95:2d
IP: 192.168.2.255 MAC: ff:ff:ff:ff:ff:ff


сделал вот таким скриптом:
#!/bin/bash
IP=$1
LIST1=$(snmpwalk -v 2c -O v -c public $IP .1.3.6.1.2.1.4.22.1 | grep -v INTEGER | sed -e "s/STRING: //g" | sed -e "s/IpAddress: //g")
COUNTER=1
for iq in $LIST1;
do
array[$COUNTER]=$iq
COUNTER=`expr $COUNTER + 1`
done
dev=$[${#array[*]}/2]
for ((i=1; i<=$dev; i++)); do
echo IP: ${array[$i+$dev]} MAC: ${array[$i]}
done


но это как-то уж больно длинно ))


"ограничение вывода построчно"
Отправлено JohnProfic , 10-Апр-09 01:25 
>[оверквотинг удален]
>array[$COUNTER]=$iq
>COUNTER=`expr $COUNTER + 1`
>done
>dev=$[${#array[*]}/2]
>for ((i=1; i<=$dev; i++)); do
>echo IP: ${array[$i+$dev]} MAC: ${array[$i]}
>done
>
>
>но это как-то уж больно длинно ))

Для этого конкреного случая может подойти что-то типа:
awk 'BEGIN { a=0; b=0 } /^MAC/ { arr[a++]=$0 } /^IP/ { print arr[b++] " " $0 }' file
Работает в "GNU Awk 3.0.4".


"ограничение вывода построчно"
Отправлено Andrey Mitrofanov , 10-Апр-09 09:55 
>>MAC ff:ff:ff:ff:ff:ff
>>IP 192.168.2.0
>IP: 192.168.2.0 MAC: ff:ff:ff:ff:ff:ff

Ещё и двоеточие добавлять?.. "Это волюнтаризЬм какой-то!"(с)

>но это как-то уж больно длинно ))

Работает? Не трогай... Врочем, вот я поупражнялся (да, на решение gawk-е короче, меньше процессов):

$ cat ./dbl
#!/bin/bash

FILE=file.txt
NN="$(wc -l <"$FILE")"
NN=$((NN/2))

paste -d\  <( head -$NN "$FILE" ) <( tail -$NN "$FILE" ) |sed 's/[A-Z]\+/\0:/g'
$ ./dbl
MAC: ff:ff:ff:ff:ff:ff IP: 192.168.2.0
MAC: 0:f:3d:86:49:b3 IP: 192.168.2.2
MAC: 8:0:27:9d:3c:97 IP: 192.168.2.18
MAC: 0:e0:7d:a3:95:2d IP: 192.168.2.162
MAC: ff:ff:ff:ff:ff:ff IP: 192.168.2.255
$ _

GNU bash, GNU coreutils, GNU sed :)


"ограничение вывода построчно"
Отправлено phpcoder , 10-Апр-09 09:10 
cut -c ?



"ограничение вывода построчно"
Отправлено andreika , 10-Апр-09 10:13 

большое спасибо, оба работают! выбрал вариант Джона :) он просто больше подходит ввиду его размеров - можно сразу уместить в конфиг nagios'а, не используя сторонних скриптов.

p.s. про cut -c не понял, не получилось.