copia linhas onde um caractere ocorre mesmo número de vezes

2

Recebi alguns arquivos que precisam ser carregados no banco de dados. Esses arquivos têm entrada do usuário e há instâncias em que o caractere de aspas é usado um número ímpar de vezes. Eu gostaria de filtrar esses registros.

Gostaria de ter linhas que contenham um caractere específico um número ímpar ou par de vezes.

Exemplo de entrada:

12345|what"s wrong|20121212
    
por Serge 06.06.2017 / 23:51

3 respostas

4

com awk :

awk -F \" 'NF % 2' < yourfile

Para um número par de vezes (número ímpar de campos onde os campos são " -separados).

awk -F \" 'NF % 2 == 0' < yourfile

Ou para dividir o arquivo em dois arquivos:

awk -F \" '{if (NF%2) print > "even.txt"
            else print > "odd.txt"}' < yourfile

Por um número ímpar de vezes.

Com grep , para o número par:

grep -Ex '(([^"]*"){2})*[^"]*'

Para números ímpares, adicione a opção -v .

    
por 07.06.2017 / 00:07
2

Abordagem alternativa perl :

- para linhas de saída com número ímpar de " ocorrências

perl -ne 'print if y/\"// % 2' yourfile

- para linhas de saída com número par de " ocorrências

perl -ne 'print if y/\"// % 2 == 0' yourfile
  • y/// - Operador de transliteração Perl
por 07.06.2017 / 00:42
0
sed -ne '
   h;:a
   s/"//;T
   s/"//;ta
   g;p
' yourfile

Trabalhando

  1. Armazene o original, pois o processo destrutivo começará.
  2. Configuramos um loop no qual sucessivamente eliminamos uma citação de cada vez, quando o primeiro del não é bem-sucedido = > terminar operações para esta linha = > número par de citações estavam presentes.
  3. No segundo scrub, se não tivermos sucesso = > um número ímpar de citações, então recuperamos do original e imprimamos.
  4. Senão nós fazemos um loopback.
por 07.06.2017 / 11:35

Tags