Se seus campos nunca contiverem vírgulas, tente:
$ perl -F, -lane '@k=split(/["|]/,$F[6]);
@l=grep{/^10\./}@k;
print "$F[0] @l"' file |
sed 's/"//g'
STRING1 10.224.241.219
STRING2 10.230.16.188
STRING3 10.226.41.43
STRING4 10.226.41.43
STRING5 10.20.40.6 10.226.41.43
Explicação
A opção -a do Perl faz com que funcione como awk , ele dividirá seus arquivos de entrada no valor dado por -F e salvará cada campo resultante como um elemento na matriz @F . Assim, o primeiro campo será $F[0] , o segundo $F[1] etc. A opção -l adiciona uma nova linha a cada print e o -n diz perl para ler seu arquivo de entrada linha por linha e aplique o script dado por -e a cada linha.
-
@k=split(/["|]/,$F[6]);: divida o sétimo campo em"ou|e salve-o como a matriz@k. Esses serão os IPs. -
@l=grep{/^10\./}@k;: salve todos os campos de@kque começam com10na matriz@l. -
print "$F[0] @l": imprima o primeiro campo e o que estiver em@l. -
sed 's/"//g': remova as cotações. Comoperldividirá as linhas de entrada antes de executar qualquer outra coisa, é mais fácil usar outro programa para isso.
Você também pode encurtar o script Perl sem usar variáveis de matriz temporárias:
perl -F, -lane 'print "$F[0] ", join " ", grep{/^10\..*/} split(/["|]/,$F[6])' file