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 / 410785
Accepted
Philip Kirkbride
Philip Kirkbride
Asked: 2017-12-14 17:56:46 +0800 CST2017-12-14 17:56:46 +0800 CST 2017-12-14 17:56:46 +0800 CST

Usando || após a substituição do awk ENVIRON

  • 772

Estou usando o awk com uma variável para cortar arquivos de log com base em um carimbo de data/hora:

LAST_LOG=$last_log awk 'index($0, ENVIRON["LAST_LOG"]) {y=1;next};y' $log_file ;

Se a data ainda existir no arquivo de log, funcionará, mas se o arquivo de log tiver sido arquivado e substituído por um arquivo novo awk, falhará.

Eu quero voltar para cat $log_filese awkfalhar:

LAST_LOG=$last_log awk 'index($0, ENVIRON["LAST_LOG"]) {y=1;next};y' $log_file ; \
  || cat $log_file

Mas essa sintaxe retorna syntax error near unexpected token ||.

A linha acima não é uma função normal que posso usar &&ou ||depois?

bash awk
  • 2 2 respostas
  • 1070 Views

2 respostas

  • Voted
  1. Best Answer
    Kusalananda
    2017-12-16T02:00:45+08:002017-12-16T02:00:45+08:00

    A questão está ; ||em

    LAST_LOG=$last_log awk 'index($0, ENVIRON["LAST_LOG"]) {y=1;next};y' $log_file ; || cat $log_file
    

    O ;termina a awkinvocação e o próximo comando começa com ||, o que é um erro de sintaxe.

    O que você quer fazer é verificar se ynão é 1 no final da análise do arquivo de log e, nesse caso, awkretornar um status de saída diferente de zero:

    LAST_LOG="$last_log" awk '
      index($0, ENVIRON["LAST_LOG"]) { y = 1; next }
      y                              { print }
      END                            { exit !y }' <"$log_file" || cat <"$log_file"
    

    Sem o explícito exit, você só obterá um status de saída diferente de zero awkse algum tipo de erro ocorrer.

    • 4
  2. JJoao
    2017-12-15T01:37:22+08:002017-12-15T01:37:22+08:00

    Nos comentários, vemos claramente a maneira de corrigir/ajustar o comando PO. Seguindo uma abordagem ligeiramente diferente do gnu-Awk:

    awk -v L=$last '$0 ~ L {y=1;next};y; END{if(!y) system("cat " FILENAME)}' $log
    
    • provavelmente a condição $0 ~ Lpode ser mais específica (ex $1 <= Lou $1 == L)
    • 2

relate perguntas

  • Embaralhamento de arquivo de várias linhas

  • Problema estranho ao passar variáveis ​​do arquivo de texto

  • Enquanto a linha lê mantendo os espaços de escape?

  • ordem de substituição de processos `te` e `bash`

  • Execute um script muito lento até que seja bem-sucedido

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