por favor, suporte para uso awk e regex

0

Eu tenho um arquivo com | separador e preciso imprimir o primeiro campo $1 e outros campos. Preciso imprimir uma parte que corresponda à expressão regular \[(.*?)\> .

cat x.txt |nawk -F"|" '{print $1"|"match regex $2,"|" match regex $3}'

Como fazer isso?

    
por amr attia 25.11.2015 / 09:59

1 resposta

1

Primeiro de tudo, não há necessidade do comando cat no começo. Você pode redirecionar a saída do arquivo para o awk, usando "< x.txt" no final da linha de comando. Melhor ainda, o awk pode pegar o nome do arquivo que você quer que seja processado como argumento. Então eu acho que você quer algo assim:

awk -F"|" '{
  printf "%s", $1;
  for (i=2; i<=NF; i++) {
    if (match($i, /\[(.*?)>/)) {
      printf " %s", substr($i,RSTART,RLENGTH);
  }};
  printf "\n"
}' x.txt

Para cada linha no arquivo, isso imprime o primeiro campo, seguido por todas as correspondências de expressão regular encontradas em cada um dos campos restantes (se houver). Os campos de saída são separados por espaços; isso pode ser alterado editando o espaço inicial no segundo comando printf.

    
por 25.11.2015 / 12:54

Tags