есть файл такого содержания:
=============
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, только для столбцов а не для строк.. либо каким скриптом это можно сделать, чтобы в одну строку уложиться? :) спасибо.
>[оверквотинг удален]
>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
>=============Покажите, что должно получиться, из описания не совсем понятно.
>[оверквотинг удален]
>>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
но это как-то уж больно длинно ))
>[оверквотинг удален]
>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".
>>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/bashFILE=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 :)
cut -c ?
большое спасибо, оба работают! выбрал вариант Джона :) он просто больше подходит ввиду его размеров - можно сразу уместить в конфиг nagios'а, не используя сторонних скриптов.p.s. про cut -c не понял, не получилось.