Alternativa para várias iterações de 'cut'

0

Estou tentando filtrar informações de um arquivo. Elas são organizadas por coluna e não encontrei uma maneira melhor de conseguir o que quero do que o seguinte:

less $file | cut -d':' -f6 | cut -d' ' -f3 | cut -d '#' -f1

Existe uma alternativa ao spam 'cut'? Qualquer ajuda seria apreciada!

    
por Dan 20.09.2015 / 10:51

1 resposta

2

Geralmente, filtrar strings é melhor feito por expressões regulares. No entanto, para o seu exemplo específico, você pode converter cada cut em uma das duas simples awk equivalentes como se segue. Qualquer um destes:

awk '{FS=":";$0=$0; FS=" ";$0=$6; FS="#";$0=$3; print $1}' $file

awk '{split($0,a,":"); split(a[6],b,/ +/); split(b[3],c,"#"); print c[1]}' $file

A primeira técnica converte "cut -dx -fy" em "FS = x; defina $ 0 como entrada; o resultado é $ y". FS é o separador de campo.

O segundo converte em "split (entrada, saída, x), resultado é saída [y]". Não tenho certeza de como o corte manipula espaços como um delimitador, então usei uma expressão regular / +/ que corresponde a muitos espaços como um. Use " " if para dividir em um único espaço.

    
por 20.09.2015 / 11:19

Tags