AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 410784
Accepted
Đặng Thắng
Đặng Thắng
Asked: 2017-12-14 17:53:16 +0800 CST2017-12-14 17:53:16 +0800 CST 2017-12-14 17:53:16 +0800 CST

Contar instâncias uniq de blocos de 2 linhas [fechado]

  • 772
Fechado . Esta questão precisa de detalhes ou clareza . Atualmente não está aceitando respostas.

Quer melhorar esta questão? Adicione detalhes e esclareça o problema editando esta postagem .

Fechado há 4 anos .

Melhore esta questão

Entrada dada:

144.252.36.69
afrloop=32235330165603
144.252.36.69
afrloop=32235330165603
144.252.36.69
afrloop=32235330165603
222.252.36.69
afrloop=31135330165603
222.252.36.69
afrloop=31135330165603
222.252.36.69
afrloop=31135330165603
222.252.36.69
afrloop=31135330165603

Como posso produzir:

144.252.36.69
afrloop=32235330165603 3 times
222.252.36.69
afrloop=31135330165603 4 times
uniq
  • 2 2 respostas
  • 1069 Views

2 respostas

  • Voted
  1. Best Answer
    n.caillou
    2017-12-14T19:20:26+08:002017-12-14T19:20:26+08:00
    paste - - < file | sort | uniq -c
    
    • 3
  2. etopylight
    2017-12-14T19:54:31+08:002017-12-14T19:54:31+08:00

    Aqui está uma solução awkse você deseja um formato de saída personalizado

    NR%2==1 {ip=$0; next}
    NR%2==0 {a[ip"\n"$0]++}
    END {
        for(i in a)
            printf "%s %d times\n", i, a[i]
    }
    

    o script pode ser executado como

    awk -f main.awk file
    

    Explicação

    • Primeiro, usamos NR%2==1para corresponder às linhas de número ímpar, já que o módulo de número ímpar 2 é igual a 1, se qualquer linha corresponder a essa condição, salvamos a linha inteira $0em uma variável chamada ip. Podemos usar nextpara pular qualquer processamento adicional e ir direto para a próxima iteração.

    • Em segundo lugar, usamos NR%2==0para corresponder linhas de números pares, se uma linha corresponder, criamos um índice rotulado como ip"\n"$0em uma matriz ae incrementamos o valor de contagem desse índice específico. Por exemplo, uma expansão equivalente seria como

      a["144.252.36.69 afrloop=32235330165603"] += 1
      

      Eu ignorei a nova linha \nneste exemplo apenas para simplificar

    • Finalmente em END, após cada linha ter sido processada, usamos um forloop para imprimir o valor de cada elemento dentro do array aque, no nosso caso, é o número de contagem para cada índice único

    Referência divertida

    • Geração de arquivo de teste (1 milhão de registros)

      awk '
          BEGIN{for(i=1;i<10000000;i++)
          printf "%d\nafrLoop=%d\n", int(rand()*100), int(rand()*10)}
      ' > test
      
      $ head test
      23
      afrLoop=2
      84
      afrLoop=1
      58
      
    • @n.caillou solução de pasta

      $ time paste - - < test | sort | uniq -c > /dev/null
      real    0m11.250s
      user    0m11.352s
      sys     0m0.272s
      
    • solução awk

      $ time awk -f main.awk test > /dev/null
      real    0m5.673s
      user    0m5.636s
      sys     0m0.036s
      
    • 3

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Matriz JSON para bash variáveis ​​usando jq

    • 4 respostas
  • Marko Smith

    A data pode formatar a hora atual para o fuso horário GMT? [duplicado]

    • 2 respostas
  • Marko Smith

    bash + lê variáveis ​​e valores do arquivo pelo script bash

    • 4 respostas
  • Marko Smith

    Como posso copiar um diretório e renomeá-lo no mesmo comando?

    • 4 respostas
  • Marko Smith

    conexão ssh. Conexão X11 rejeitada devido a autenticação incorreta

    • 3 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Marko Smith

    comando systemctl não funciona no RHEL 6

    • 3 respostas
  • Marko Smith

    rsync porta 22 e 873 uso

    • 2 respostas
  • Marko Smith

    snap /dev/loop em 100% de utilização -- sem espaço livre

    • 1 respostas
  • Marko Smith

    chave de impressão jq e valor para todos no subobjeto

    • 2 respostas
  • Martin Hope
    EHerman Matriz JSON para bash variáveis ​​usando jq 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux A data pode formatar a hora atual para o fuso horário GMT? [duplicado] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC Como posso copiar um diretório e renomeá-lo no mesmo comando? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve Como as permissões de arquivo funcionam para o usuário "root"? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe Altere o editor padrão para vim para _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey Como baixar o pacote não instalá-lo com o comando apt-get? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao Por que os diretórios /home, /usr, /var, etc. têm o mesmo número de inode (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg — o comando list-keys gera uid [ desconhecido ] depois de importar a chave privada para uma instalação limpa 2017-11-26 18:26:02 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve