Вы можете сделать это, не касаясь Perl.Вы были на правильном пути, но с помощью регулярного выражения вы можете искать по имени, а не по положению.
Кроме того, вы должны помещать кавычки в строку $, чтобы не обжечься трубами или точками с запятой, висящими вокруг.
pro=`echo "$line" | grep -o 'PROTO=\w+\+' | cut -d '=' -f 2`;
Конечно, если вы действительно хотели использовать Perl, вы могли бы сделать гораздо более приятное решение:
#!/usr/bin/perl
while(<>) {
/IN=(\S*) .*OUT=(\S*) .*SRC=(\S*) .*DST=(\S*) .*PROTO=(\S*)/
and print "$1,$2,$3,$4,$5\n";
}
Затем позвоните:
./thatScript.pl logFile.txt >>output.csv