#!/usr/bin/perl
use strict;
use warnings;
my %count;
# extract protocol and source-ip-address, count rows with same values
while(<>) {
if (/^([^ ]+).*src=([0-9.]+)/) {
$count{"$1 $2"}++;
}
}
# sort by count
for my $p_src (sort {$count{$b} <=> $count{$a}} keys %count) {
print "$p_src\t$count{$p_src}\n";
}
Пример (Ваши данные не очень интересны),
$ eg.pl eg.txt
tcp 67.201.31.35 1
tcp 80.132.51.190 1
tcp 80.132.51.194 1
udp 192.168.1.201 1
udp 91.120.112.125 1
udp 98.196.37.3 1
udp 98.196.37.7 1
awk -F'\t' -vOFS='\t' '{ gsub("CC", "C", $1) ; gsub("AA", "A", $1) ; print }'
Замена $1
со столбцом, который Вы хотите изменить.
Чтобы найти и заменить в одном поле, используйте эту команду:
sed 's/whatyouwanttofind/whatyouwanttoreplace/field#'
т.е. вы повторяете это:
$echo -e "1are,2are,3are,4are\n5are,6are,7are,8are"
1are,2are,3are,4are
5are,6are,7are,8are
и хотите сделать это
$echo -e "1are,2are,3are,4are\n5are,6are,7are,8are" | sed 's/are/arrr/2'
1are,2**arrr**,3are,4are
5are,6**arrr**,7are,8are
-vOFS='\t'
опция может быть добавлена. положительная сторона – manatwork 14.06.2012, 13:18awk
не имейте agsub
функция. Как Вы сделали бы это затем? Можетsed
использоваться вместо этого? – rahmu 14.06.2012, 16:33gsub()
определялся POSIX больше 20 лет, таким образом, мое предложение должно будет получить версию awk, который не является совершенно ужасным ;-) – Chris Down 14.06.2012, 16:40