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 / user-231571

WashichawbachaW's questions

Martin Hope
WashichawbachaW
Asked: 2018-11-01 03:54:18 +0800 CST

Comando de data para produzir nulo/nada quando a variável fornecida tiver um valor vazio

  • 0

Como um datecomando produziria nulo/nada quando a variável fornecida tem valor nenhum/nulo. Eu sei que if elsea declaração pode fazer isso, mas eu meio que acho que não é a maneira correta. Existe um comando decente ou alterações no datecomando para fazer isso?

Por exemplo

myDay=""
bDay=`date -d "$myDay"`
echo "$bDay" // this should have no output
date
  • 1 respostas
  • 336 Views
Martin Hope
WashichawbachaW
Asked: 2018-04-03 22:25:28 +0800 CST

Processamento de texto: como classificar lista por data delimitada por uma string

  • 0

Eu quero classificar o conteúdo file.txtpor data. <td></td>A data para classificar está na quarta tag de dados da tabela

Ex: Conteúdo de file.txt:

<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2018Mar01</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2017Jan31</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2018Apr02</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2017Dec25</td></tr>

Saída desejada: Como posso fazer isso?

<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2017Jan31</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2017Dec25</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2018Mar01</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2018Apr02</td></tr>

Eu tenho usado sorto comando, mas não está funcionando.

cat file.txt 2> /dev/null | sort -t'>' -k9n -k9.4M -k9.7n

EDIT: Encontrei este link de referência, mas ainda não funciona corretamente. https://stackoverflow.com/a/16060031/7842707

text-processing sort
  • 1 respostas
  • 170 Views
Martin Hope
WashichawbachaW
Asked: 2018-02-14 22:28:53 +0800 CST

Como imprimir apenas 1 nome de arquivo junto com o padrão correspondente?

  • 1

Desejo imprimir o(s) nome(s) do arquivo junto com o padrão correspondente, mas apenas uma vez, mesmo que a correspondência do padrão tenha várias ocorrências no arquivo.

Por exemplo, tenho uma lista de padrões; list_of_patterns.txte o diretório que preciso para encontrar os arquivos é /path/to/files/*.

list_of_patterns.txt :

A
B
C
D
E

/caminho/para/arquivos/

/file1
/file2
/file3

Digamos que /file1tenha o padrão Avárias vezes assim:

/arquivo1 :

A
4234234
A
435435435
353535
A

(Também vale para outros arquivos onde há várias correspondências de padrão.)

Eu tenho este comando grep em execução, mas ele imprime o nome do arquivo toda vez que um padrão corresponde.

grep -Hof list_of_patterns.txt /path/to/files/*

resultado:

/file1:A
/file1:A
/file1:A
/file2:B
/file2:B
/file3:C
/file3:B
... and so on.

Eu sei que o sort pode fazer isso quando você o canaliza após o comando grep grep -Hof list_of_patterns.txt /path/to/files/* | sort -u, mas ele só é executado quando o grep é concluído. No mundo real, my list_of_patterns.txttem centenas de padrões dentro. Às vezes, leva uma hora para terminar a tarefa.

Existe uma maneira melhor de acelerar o processo?

ATUALIZAÇÃO: alguns arquivos têm mais de cem ocorrências de padrão correspondente. Ex /file4. tem ocorrências do padrão A900 vezes. É por isso que está demorando grepuma hora para terminar porque imprime todas as ocorrências da correspondência de padrão junto com o nome do arquivo.

Por exemplo, saída:

/file4:A
/file4:A
/file4:A
/file4:A
/file4:A
/file4:A
/file4:A
/file4:A
... and so on til' it reach 900 occurrences.

Eu só quero que imprima apenas uma vez.

Ex.: Saída desejada:

/file4:A
/file1:A
/file2:B
/file3:A
/file4:B
text-processing performance
  • 1 respostas
  • 230 Views
Martin Hope
WashichawbachaW
Asked: 2018-02-09 02:07:44 +0800 CST

Processamento de texto - Como obter a linha correspondente do padrão A até a primeira ocorrência da linha correspondente do padrão B?

  • 1

Desejo obter as linhas que, na ordem inversa, correspondem da linha correspondente do padrão A à primeira ocorrência da linha correspondente do padrão B junto com as linhas pelas quais ela passa.

ATUALIZADA:example_file.txt

ISA*00*          *00*          *ZZ*SIX-SIX6      *12*666666666666     *66666666*6666*U*666666666*6666666666*0*P*\
GS*FA*SIX-SIX-SIX*666666666*6666666*6666*6666*X*66666
ST*666*666
AK1*SX*666
AK2*777*6666666
AK5*A
AK2*777*7777777
AK3*S6*5**3
AK3*A2*5**3
AK4*3*6969*4
AK4*7*6969*4
AK5*R*5
AK2*777*6666666
AK5*A
AK2*777*69696969
AK3*J7*5**3
AK4*3*6969*4
AK5*R*5
AK9*P*20*20*19
SE*69*6969
GE*1*6767
IEA*1*0000000000

O que eu quero é pegar, de baixo para cima, todo o AK5padrão com Rdepois dele, assim:

Padrão A :AK5*R

e obtenha todas as linhas subindo até que a primeira ocorrência do padrão B seja correspondida. por exemplo:

Padrão B :AK2

Saída desejada :

O primeiro padrão A encontrado será chamado de E1

AK2*777*7777777
AK3*S6*5**3
AK3*A2*5**3
AK4*3*6969*4
AK4*7*6969*4
AK5*R*5

ATUALIZADO: O segundo padrão A correspondente será chamado de E2

AK2*777*69696969
AK3*J7*5**3
AK4*3*6969*4
AK5*R*5

e assim por diante se houver mais de 1 padrão A correspondido.

EDIT: Eu sei sedque posso fazer isso, mas ainda não tenho sorte em obter a linha de cada padrão A correspondente à sua primeira ocorrência do padrão B correspondente e armazená-los em um arquivo de texto temporário para processamento posterior.

Este é o meu sedcomando de exemplo que obtém todo o padrão B disponível noexample_file.txt

sed -ne '/AK2\*/,/\AK5\*R/p' example_file.txt

Exemplo de cenário lógico de comando:

A="AK5\*R"
B="AK2"

find the first $A < example_file.txt; # AK5\*R
move to previous line until first occurrence of $B line; # AK2*any_number*any_number
get all lines from first $A to its first occurrence of $B and store in a text file; # result > e1.txt
# The same way goes to the second occurrence of pattern A.

(NOTA: Primeira ocorrência do significado $B, começando de cada linha $A, obtenha a linha $A e as linhas anteriores até a primeira linha correspondente $B que encontrar. Então, por exemplo, se a primeira linha $A começar na linha do meio de um arquivo como na linha número 50, se o arquivo tiver 100 linhas no total, a partir daí, mova para a linha anterior até que o comando encontre a primeira linha $ B que ele vê.) Veja o exemplo abaixo.

exemplo_arquivo2.txt

ISA*00*          *00*          *ZZ*SIX-SIX6      *12*666666666666     *66666666*6666*U*666666666*6666666666*0*P*\
GS*FA*SIX-SIX-SIX*666666666*6666666*6666*6666*X*66666
ST*666*666
AK1*SX*666
AK2*777*6666666
AK5*A
AK2*777*7777777
AK5*A
AK2*777*888888
AK5*A
AK2*777*7777777
AK5*A
AK2*777*5555555
AK5*A
AK2*777*7777777
AK5*A
AK2*777*4545435
AK5*A
AK2*777*7777777
AK5*A
AK2*777*7777777
AK3*S6*5**3
AK3*A2*5**3
AK4*3*6969*4
AK4*7*6969*4
AK5*A
AK2*777*0987654
AK3*S6*5**3
AK3*A2*5**3
AK4*3*6969*4
AK4*7*6969*4
AK5*R*5
AK2*777*7777777
AK3*S6*5**3
AK3*A2*5**3
AK4*3*6969*4
AK4*7*6969*4
AK5*A
AK2*777*7777777
AK3*S6*5**3
AK3*A2*5**3
AK4*3*6969*4
AK4*7*6969*4
AK5*A

Resultado:

AK2*777*0987654
AK3*S6*5**3
AK3*A2*5**3
AK4*3*6969*4
AK4*7*6969*4
AK5*R*5
text-processing sed
  • 2 respostas
  • 235 Views
Martin Hope
WashichawbachaW
Asked: 2018-01-05 01:12:48 +0800 CST

Processamento de texto - Como obter vários padrões em ordem a partir de um arquivo

  • 0

Eu tenho isso file.txt.Zque contém isso:

AK2*856*1036~AK3*TD1*4**~AK4*2**1*~AK4*7**1*~AK3*TD5*5**~AK4*3**6*2~AK3*REF*6**~AK4*2**1*~AK3*REF*7**~AK4*2**1*~AK3*REF*8**~AK4*2**1*~AK3*DTM*9**~AK4*2**4*20~AK4*2**4*20~AK3*CTT*12**7~AK5*R
AK2*856*1037~AK3*HL*92**~AK4*3**7*O~AK5*R~AK9*R*2*2*0~SE*25*0001~GE*1*211582~IEA*1*000211582

Cada registro consiste em vários campos começando com um cabeçalho (geralmente AKcom um número), separados por ~. Se você substituir o ~por uma quebra de linha recuada, ele lerá:

AK2*856*1036
  AK3*TD1*4**
  AK4*2**1*
  AK4*7**1*
  AK3*TD5*5**
  AK4*3**6*2
  AK3*REF*6**
  AK4*2**1*
  AK3*REF*7**
  AK4*2**1*
  AK3*REF*8**
  AK4*2**1*
  AK3*DTM*9**
  AK4*2**4*20
  AK4*2**4*20
  AK3*CTT*12**7
  AK5*R
AK2*856*1037
  AK3*HL*92**
  AK4*3**7*O
  AK5*R
  AK9*R*2*2*0
  SE*25*0001
  GE*1*211582
  IEA*1*000211582

Cada campo possui subcampos separados por *. Por exemplo, o subcampo AK201é o primeiro campo após um AK2cabeçalho, portanto, é 856para as linhas de exemplo.

Como você pode ver, há 2 linhas com uma string inicial de AK2. Isso é como um cabeçalho de linha ou, como o chamamos, cabeçalho de segmento. Existem dois cabeçalhos de segmento em file.txt.Z. O que eu quero é obter esses dados de cada cabeçalho de segmento em ordem:

Dados Necessários:

  • AK202 (segundo campo após o AK2cabeçalho) - AK2*856*this_numeric_valueantes do asterisco ou ~.
  • AK301 (primeiro campo após o AK3cabeçalho) - ~AK3*this_string_valueantes do *ou ~.
  • AK502 (segundo campo após o AK5cabeçalho) - ~AK5*some_string_value*this_numeric_valueantes do *ou ~.
  • AK401 (primeiro campo após o AK4cabeçalho) - ~AK4*this_numeric_valueantes do *ou ~.
  • Cada valor numérico de AK4ou AK5campo deve ter sempre pelo menos 2 dígitos. por exemplo AK502 = 2; AK502 = 02 ou AK401 = 9; AK401 = 09.
  • Se não houver nenhum AK3campo, não imprima nada. (Já tenho um script para isso)
  • Se uma linha contiver mais de uma sequência AK3-AK5-AK4, elas devem ser concatenadas com um espaço em branco
  • Se o AK5campo faltar após o AK3campo, procure o AK4campo em seu lugar.
  • Se nem um AK4nem um AK5campo estiverem presentes após o AK3campo, imprima apenas o AK301 (primeiro campo após o cabeçalho AK3).
  • Se houver mais de um AK4campo após um AK3campo, concatene as sequências AK502-AK401 por vírgulas

Resultado:

GS: 1036 - TD102,07 TD503 REF02 DTM02,02 CTT
GS: 1037 - HL03

Como fazer isso? Apenas me pergunte se você está confuso com a minha pergunta.

Editar: Este é o meu código: isso está dentro de um loop while

while read FILE
do
    AK2=`zgrep -oP 'AK2.[\w\s\d]*.\K[\w\s\d]*' < $FILE`
    AK3=`zgrep -oP 'AK3.\K[\w\s\d]*' < $FILE`
    AK5=`zgrep -oP 'AK5.[\w\s\d]*.\K[\w\s\d]' < $FILE`
    AK5_ERROR=`if [[ $AK5 =~ ^[0-9]+$ ]]; then  printf "%02d" $AK5 2> /dev/null; else 2> /dev/null; fi`
    AK4=`zgrep -oP 'AK4.\K[\w\s\d]*' < $FILE`
    AK4_ERROR=`if [[ $AK4 =~ ^[0-9]+$ ]]; then  printf "%02d" $AK4 2> /dev/null; else 2> /dev/null; fi`

    if [[ $AK3 ]]
    then
        if $AK5 2> /dev/null
        then
            echo "GS: $AK2 - $AK3$AK4_ERROR"
        else
            echo "GS: $AK2 - $AK3$AK5_ERROR"
        fi
    else
        echo "Errors are not specified in the file."
    fi
done < file.txt.Z

O problema com meu código original é que ele não concatena $AK3e, $AK5ou $AK4.

text-processing
  • 2 respostas
  • 137 Views
Martin Hope
WashichawbachaW
Asked: 2017-12-22 01:29:34 +0800 CST

Processamento de Texto - Como produzir um arquivo que corresponda a um padrão em todas as suas linhas

  • 2

Eu tenho isso file.txtcontendo esta lista.

LIST: ACCEPTED - rfhfui4fuw3hjnf43.4fj9u8fhjkszdnvckizfjh489.dfsdf
LIST: ACCEPTED - rfhfui4fuw3hjnf43.fj9u8fhjkszdnvckizfjh489.dfsdf
LIST: ACCEPTED - rfhfui4fuw3hjnf43.4fj9u8fhjkszdnvckizfjh489.dfsdf
LIST: ACCEPTED - rfhfui4fuw3hjnf43.4f.j9u8fhjkszdnv.ckizfjh489.dfsdf
LIST: ACCEPTED - rfhfui4fuw3hjnf.43.4fj9u8fhjkszdnvckizfjh489.dfsdf

O que eu quero que aconteça é saber se file.txttodas as linhas correspondem a um padrão que desejo encontrar.

Por exemplo, se o padrão ACCEPTEDcorresponder a todas as linhas de file.txtentão echo "All lines are Accepted".

Acho que greptem a resposta para isso, mas ainda estou experimentando e ainda sem sorte.

Eu quero usar isso com uma if...elsecondição.

grep text-processing
  • 1 respostas
  • 66 Views
Martin Hope
WashichawbachaW
Asked: 2017-12-06 19:02:20 +0800 CST

processamento de texto - Como classificar a saída exclusiva de find que possui nomes de arquivos duplicados de diretório diferente?

  • 1

Eu quero classificar esta saída única do comando find sem nomes de arquivos duplicados em qualquer diretório.

find /path/to/first_directory/* /path/to/second_directory/* /path/to/third_directory/* -mtime -1 -name "filename_pattern*"

saída de exemplo:

/path/to/first_directory/sample_file1_2017Dec25.dat
/path/to/first_directory/sample_file2_2017Nov01.dat
/path/to/first_directory/sample_file3_2017Oct08.dat
/path/to/first_directory/archive/sample_file1_2017Dec25.dat.Z
/path/to/first_directory/archive/sample_file2_2017Nov01.dat.Z
/path/to/second_directory/sample_file4_2017Sep11.dat
/path/to/second_directory/sample_file5_2017Oct05.dat
/path/to/third_directory/sample_file1_2017Dec25.dat
/path/to/third_directory/sample_file2_2017Nov01.dat
/path/to/third_directory/sample_file3_2017Oct08.dat
/path/to/third_directory/sample_file4_2017Sep11.dat
/path/to/third_directory/sample_file5_2017Oct05.dat
/path/to/third_directory/sample_file6_2017July04.dat
/path/to/third_directory/sample_file6_2017June12.dat
/path/to/third_directory/sample_file7_2017May01.dat

Na saída, você pode ver que há nomes de arquivos duplicados em /first_directory/e /first_directory/archive/também todos os arquivos de /first_directory/*e /second_directory/*também estão dentro de /third_directory/*. Isso significa que /third_directory/*é o diretório de arquivo de todos os arquivos encontrados em /first_directory/*e /second_directory/*, mas também há arquivos que só podem ser encontrados em /third_directory/*( verifique sample_file6e sample_file7)

Tudo o que quero imprimir são os arquivos originários de para para /first_directory/nesta /first_directory/archive/ordem sem duplicação e também classificados por data./second_directory//third_directory/

Saída desejada:

/path/to/first_directory/sample_file1_2017Dec25.dat
/path/to/first_directory/sample_file2_2017Nov01.dat
/path/to/first_directory/sample_file3_2017Oct08.dat
/path/to/second_directory/sample_file4_2017Sep11.dat
/path/to/second_directory/sample_file5_2017Oct05.dat
/path/to/third_directory/sample_file6_2017July04.dat
/path/to/third_directory/sample_file6_2017June12.dat
/path/to/third_directory/sample_file7_2017May01.dat
text-processing find
  • 1 respostas
  • 274 Views

Sidebar

Stats

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

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

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

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +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

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