Como corrigir um número não correspondido de blocos em 2 colunas

0

Eu tenho um arquivo no qual as últimas duas colunas não são combinadas em número de blocos ( $3 tem 3 blocos, mas $4 tem 2) em algumas linhas. Como posso consertar todo o arquivo? Obrigado

o que eu tenho:

162   167   4,92,4    2,19
143   164   2,4       54,32
532   843   6,4,5     43,23,53  

o que eu quero:

143   164   2,4       54,32
532   843   6,4,5     43,23,53                                                                                                                     
    
por Behmah 09.06.2017 / 07:55

3 respostas

4

tente

awk 'split($3,A,",") == split($4,B,",")'

como por homem awk

split(s, a [, r [, seps] ]) Split the string s into the array a and the separators array seps on the regular expression r, and return the number of fields.

  • a ação padrão do awk é print implícito
por 09.06.2017 / 09:01
1

Para filtrar as linhas com números diferentes de valores delimitados por vírgulas nos campos 3 e 4:

awk '{ nc3=split($3,a,","); nc4=split($4,a,",") } nc3 == nc4' data.in

A awk function split dividirá o campo determinado na expressão regular em seu terceiro argumento (uma vírgula neste caso) e armazenará os campos gerados na matriz em seu segundo argumento ( a here). Nós não usamos o array resultante, mas usamos o focus que split também retorna o número de entradas de array geradas.

Se esses números ( nc3 e nc4 ) forem idênticos, a linha será impressa.

    
por 09.06.2017 / 09:01
1

Abordagem simples awk :

awk -F"[[:space:]]+|," '!(NF%2){ print }' file

A saída:

143   164   2,4       54,32
532   843   6,4,5     43,23,53
  • !(NF%2) - considerando apenas as linhas que possuem um número par de itens (tratando os espaços em branco e , como separadores de campos)
por 09.06.2017 / 12:42

Tags