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[text-processing](unix)

Martin Hope
Paolo Lorenzini
Asked: 2025-04-18 00:09:08 +0800 CST

editar todos os valores em uma coluna específica com base no intervalo de números de linha

  • 6

Tenho um arquivo PDB (coordenadas de átomos em uma proteína) em uma máquina Linux:

ATOM      1   N  GLY A   1       0.535  51.766   5.682  1.00  0.00              
ATOM      2  CA  GLY A   1      -0.712  50.962   5.596  1.00  0.00              
ATOM      3   C  GLY A   1      -1.243  50.872   4.179  1.00  0.00              
ATOM      4   O  GLY A   1      -1.313  51.888   3.492  1.00  0.00              
ATOM      5   N  GLN A   2      -1.600  49.664   3.737  1.00  0.00              
ATOM      6  CA  GLN A   2      -2.221  49.468   2.423  1.00  0.00              
ATOM      7   C  GLN A   2      -3.542  48.719   2.507  1.00  0.00              
ATOM      8   O  GLN A   2      -3.722  47.844   3.356  1.00  0.00              
ATOM      9  CB  GLN A   2      -1.280  48.738   1.468  1.00  0.00              
ATOM     10  CG  GLN A   2      -0.976  47.294   1.830  1.00  0.00              
....     ..  ..   .. .   .       ....   ....     ....   ....  ....
TER   SPLIT LINE FOR INTERNAL USE ONLY
ATOM      1  O5'  G  A   1     -44.412  97.503  31.177  1.00  0.00              
ATOM      2  C5'  G  A   1     -45.447  96.803  31.882  1.00  0.00              
ATOM      3  C4'  G  A   1     -45.225  95.295  31.894  1.00  0.00              
ATOM      4  O4'  G  A   1     -46.441  94.578  31.654  1.00  0.00              
ATOM      5  C3'  G  A   1     -44.328  94.850  30.748  1.00  0.00              
ATOM      6  O3'  G  A   1     -42.943  94.877  31.129  1.00  0.00              
ATOM      7  C2'  G  A   1     -44.804  93.425  30.542  1.00  0.00              
ATOM      8  O2'  G  A   1     -44.163  92.592  31.466  1.00  0.00              
ATOM      9  C1'  G  A   1     -46.304  93.444  30.772  1.00  0.00              
ATOM     10  N9   G  A   1     -46.965  93.699  29.495  1.00  0.00
....     ..  ..   .  .   .     .......  ......   .....  ....   ...

O registro TER marca explicitamente o fim de uma cadeia de aminoácidos específica. Quero alterar o ID da cadeia da proteína na quinta coluna pelo awk para atribuir o ID correto à nova cadeia após TER.

Resultado esperado:

ATOM      1   N  GLY A   1       0.535  51.766   5.682  1.00  0.00              
ATOM      2  CA  GLY A   1      -0.712  50.962   5.596  1.00  0.00              
ATOM      3   C  GLY A   1      -1.243  50.872   4.179  1.00  0.00              
ATOM      4   O  GLY A   1      -1.313  51.888   3.492  1.00  0.00              
ATOM      5   N  GLN A   2      -1.600  49.664   3.737  1.00  0.00              
ATOM      6  CA  GLN A   2      -2.221  49.468   2.423  1.00  0.00              
ATOM      7   C  GLN A   2      -3.542  48.719   2.507  1.00  0.00              
ATOM      8   O  GLN A   2      -3.722  47.844   3.356  1.00  0.00              
ATOM      9  CB  GLN A   2      -1.280  48.738   1.468  1.00  0.00              
ATOM     10  CG  GLN A   2      -0.976  47.294   1.830  1.00  0.00                 
TER   SPLIT LINE FOR INTERNAL USE ONLY
ATOM      1  O5'  G  B   1     -44.412  97.503  31.177  1.00  0.00              
ATOM      2  C5'  G  B   1     -45.447  96.803  31.882  1.00  0.00              
ATOM      3  C4'  G  B   1     -45.225  95.295  31.894  1.00  0.00              
ATOM      4  O4'  G  B   1     -46.441  94.578  31.654  1.00  0.00              
ATOM      5  C3'  G  B   1     -44.328  94.850  30.748  1.00  0.00              
ATOM      6  O3'  G  B   1     -42.943  94.877  31.129  1.00  0.00              
ATOM      7  C2'  G  B   1     -44.804  93.425  30.542  1.00  0.00              
ATOM      8  O2'  G  B   1     -44.163  92.592  31.466  1.00  0.00              
ATOM      9  C1'  G  B   1     -46.304  93.444  30.772  1.00  0.00              
ATOM     10  N9   G  B   1     -46.965  93.699  29.495  1.00  0.00  

Tudo precisa ser separado com os mesmos espaços, o seguinte arranjo estaria errado:

ATOM   3674  CD1 PHE A 460       2.350  79.471  35.466  1.00  0.00              
ATOM   3675  CD2 PHE A 460       1.037  81.443  35.196  1.00  0.00              
ATOM   3676  CE1 PHE A 460       2.425  79.321  34.080  1.00  0.00              
ATOM   3677  CE2 PHE A 460       1.108  81.298  33.805  1.00  0.00              
ATOM   3678  CZ  PHE A 460       1.805  80.232  33.250  1.00  0.00              
TER SPLIT LINE FOR B USE ONLY
ATOM 1 O5' G B 1 -44.412 97.503 31.177 1.00 0.00
ATOM 2 C5' G B 1 -45.447 96.803 31.882 1.00 0.00
ATOM 3 C4' G B 1 -45.225 95.295 31.894 1.00 0.00
ATOM 4 O4' G B 1 -46.441 94.578 31.654 1.00 0.00
ATOM 5 C3' G B 1 -44.328 94.850 30.748 1.00 0.00

Além disso, o arquivo termina com isto:

TER
ENDMDL

Há uma linha em branco no final do arquivo que precisa ser deixada como está

text-processing
  • 3 respostas
  • 61 Views
Martin Hope
sloppy
Asked: 2025-04-14 08:28:02 +0800 CST

Combine várias variáveis ​​em duas linhas e exclua a entrada inteira

  • 5
MATCH1.MATCH2 {
    always same MATCH3
}

Todos os três MATCHdevem corresponder.

entrada:

foo.bar {
    always same bus
}
1.2 {
    always same 3
}
a.b {
    always same c
}
i.ii {
    always same iii
}
b.2 {
    always same c
}
1.2 {
    always same b
}

digamos que eu queira excluir 1e a entrada MATCH(es) (do nome até a chave de 2fechamento )3}

saída:

foo.bar {
    always same bus
}
a.b {
    always same c
}
i.ii {
    always same iii
}
b.2 {
    always same c
}
1.2 {
    always same b
}

Tentei várias abordagens, sedmas nenhuma delas me levou perto:

sed "/$match1\.$match2/{/$match3//d;}" ./input
sed "/^$match1\.$match2 {/,/^always same $match3/d" ./input
# ...

Eu tive muita dificuldade com o fato de haver duas linhas que precisam ser correspondidas. Tentei adicionar \ne .*no meio, mas sem sucesso.

Aqui está o que usei para excluir a entrada correspondendo apenas à primeira linha, se isso ajudar:

sed "/^$match1\.$match2 {/,/^}/d" ./input # no match3
text-processing
  • 5 respostas
  • 77 Views
Martin Hope
Thierry Blanc
Asked: 2025-02-06 18:15:46 +0800 CST

removendo instruções de chaves contendo chaves aninhadas dentro

  • 8

Um problema típico do látex:

\SomeStyle{\otherstyle{this is the \textit{nested part} some more text...}}

Agora eu quero remover tudo \SomeStyle{...}, mas não o conteúdo. O conteúdo contém chaves aninhadas. A linha acima deve se tornar:

\otherstyle{this is the \textit{nested part} some more text...}

Questões:

  1. Algum editor de LaTeX oferece uma maneira de fazer isso?
  2. Qual editor/script faz isso?
  3. Como fazer isso com sed? [🤓]

Minha solução é um script bash usando sed.

  1. preparar texto: marcar substituir string com ascii bell, adicionar nova linha após cada chave
  2. loop: find { -> adiciona X ao espaço de espera, find } -> remove X do espaço de espera, mantém o espaço vazio -> remove o fechamento }
  3. restaurar novas linhas e sino ascii para o anterior

O script funciona, mas falha com: \badstyle{w}\badstyle{o}\badstyle{r}\badstyle{d} Ele se tornará: wo}rd}

a ramificação para :f parece não funcionar.

F=$(sed 's|\\|\\\\|g;s|{|\\{|g' <<< "$1"  )

# mark all removestrings with ascii bell and newline
# add newline after each { and }  
SEDpre='
s|'"$F"'|\a%\n|g

s|\{|\{\n|g
s|\}|\}\n|g
'


SEDpost='
:a;N;$!ba;
s|\a%\n||g

s|\{\n|\{|g
s|\}\n|\}|g
'

# count the brackets
SED='
/\a%/{
:a
        n
:f
        /\{/{x;s|$|X|;x;ba}
        /\}/{x;
                s|X||;
                /^$/{x;bb}
                x
                ba
            }
}
b
:b  
/\}/{   
    s|\}||;
    N;
    s|\n||;
    /\a%/bf
     }
'

sed -r -E  "$SEDpre"  "$2"  | sed -rE "$SED"  | sed -rE "$SEDpost" 
text-processing
  • 5 respostas
  • 529 Views
Martin Hope
Luke
Asked: 2024-12-16 23:42:36 +0800 CST

Extraindo índice de PDFs

  • 5

Tenho uma biblioteca pessoal razoavelmente grande com livros em vários formatos. Tentei organizar seus metadados, incluindo um campo de texto contendo os índices. No momento, estou usando o recurso 'Area Text Selection' do meu leitor de documentos para copiar o texto. Fazer isso para DJVUs com djview produz índices bem formatados, como este:

CONTENTS
1. EXPERIMENTS
1.1. The definition of an experiment ..... 1
1.2. Algebras of events as Boolean algebras .... 6
1.3. Operations with experiments ...... 9
1.4. Canonical representation of polynomials of events . . 12
....

Enfatizo que tudo o que fiz foi arrastar meu mouse pela página e clicar em "Copiar texto". Se eu tentar isso com um PDF, a estrutura será completamente perdida e terei que gastar algum tempo limpando a seleção de texto, movendo os números de página e seção. Posso obter algo assim:

Table of Contents
I
 Introduction
1
 Introduction
1.1
 Table of Contents
1.2
 Acknowledgments
1
3
3
6
II
....

Estou procurando um leitor de PDF que possa copiar o texto de forma similar, mas com a "estrutura" preservada. O fato de os leitores DJVU terem essa capacidade me diz que isso deve ser possível.

Nota: Não estou falando sobre extrair ToCs dos favoritos: muitos dos meus PDFs não têm nenhum. Eu também gostaria de evitar uma ferramenta CLI que tenha que processar o arquivo inteiro: eu só quero que ela pegue o texto que eu selecionar, mas com as quebras de linha e a estrutura geral intactas.

text-processing
  • 2 respostas
  • 26 Views
Martin Hope
Vlado B.
Asked: 2024-12-13 17:47:33 +0800 CST

Atualizar objeto dentro de array dentro de outro objeto JSON

  • 8

Tenho um objeto JSON enorme com um array de objetos dentro dele. Tenho que adicionar o par chave:valor a um objeto específico no array. Por exemplo, deixe o objeto de entrada ser:

{
  "a": {
    "b": [
      {
        "name": "name1",
        "value": 1,
        "param": {
          "p1": "par1"
        }
      },
      {
        "name": "name2",
        "value": 2,
        "param": {
          "p1": "par2"
        }
      },
      {
        "name": "name3",
        "value": 3,
        "param": {
          "p1": "par3"
        }
      }
    ],
    "c": 4,
    "d": 5
  }
}

Usando o índice a modificação é fácil:

 jq '.a.b[0].param += {new: "QQQ"}'

Mas não posso ter 100% de certeza do índice. Tenho que especificar o objeto com a tag name .name == "name1".

Como modificar um objeto identificado por etiqueta de nome?

text-processing
  • 2 respostas
  • 23 Views
Martin Hope
learningregularexpressions
Asked: 2024-12-09 02:35:46 +0800 CST

Como faço para mesclar a linha inferior com a linha anterior?

  • 6

Tenho um arquivo bem básico;

15
Chapter name


some text and some more text
some text and some more text

Eu estava tentando conseguir algo assim

Book: 15 Chapter name


some text and some more text
some text and some more text

Eu estava tentando fazer isso usando sed com este padrão;

sed 's/^\([[:digit:]]\+\)\n\([[:alpha:]].*$\)\n$/Book: \1 \2\n/g'

Aparentemente isso não funciona no terminal, mas funciona perfeitamente na versão VIM do sed.

text-processing
  • 3 respostas
  • 50 Views
Martin Hope
Avenger
Asked: 2024-12-07 03:19:34 +0800 CST

Como inserir texto antes da primeira linha de um arquivo UTF-8 com BOM

  • 5

Esta questão está intimamente relacionada a: Como inserir texto antes da primeira linha de um arquivo? . Eu deliberadamente fiz o título parecido com o daquela questão para destacar isso.

Exceto que o arquivo de destino é UTF-8 com BOM.

Então, eu quero adicionar uma primeira linha a um arquivo que tem bytes UTF-8 BOM em seu cabeçalho ( 0xef 0xbb 0xbfcaracteres). Pelo menos os arquivos UTF-8 com BOM que eu tenho aqui começam com isso.

Se eu simplesmente seguir em frente e seguir as soluções na questão relacionada,

sed "1i My First line is now this." file.txt

Eu obterei (no VSCode no meu caso) algo como

My First line is now this.
?The first line was this one
Second line and so on

Estando ?na segunda linha o caractere UTF-8 para expressar algo não imprimível.

Outra consequência, como seria de se esperar, é que o arquivo não abre mais como UTF-8 com BOM e agora dependemos dos recursos do editor de texto para "adivinhar" sua codificação. Determinamos um padrão em nosso projeto para ter arquivos com BOM para garantir que tudo esteja na mesma codificação.

Como preservo o cabeçalho da lista de materiais no arquivo ao adicionar o texto?

text-processing
  • 2 respostas
  • 42 Views
Martin Hope
Lurch
Asked: 2024-12-06 16:47:42 +0800 CST

Excluir linhas contendo correspondência parcial de string

  • 6

Eu tenho 2 arquivos

arquivo1

00:00:00:00:00:01

arquivo2

00:00:00:00:00:02 foo bar
00:00:00:00:00:01 something else

O que eu quero fazer é comparar os dois arquivos e remover 00:00:00:00:00:01do arquivo 2 para terminar com

arquivo 2

00:00:00:00:00:02 foo bar

tentei

grep -Fvx file1 file2

Mas isso não parece funcionar para correspondências de linhas parciais.

text-processing
  • 1 respostas
  • 59 Views
Martin Hope
Matteo
Asked: 2024-11-25 21:34:48 +0800 CST

duplicar colunas com AWK e separá-las por tabulação

  • 7

Tenho um arquivo grande com o seguinte formato tab-separado:

#CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT  recombination
chr1    586001  >63041388>63041391      G       A       60      .       AC=80;AF=0.3125;AN=256;AT=>63041388>63041390>63041391,>63041388>63041389>63041391;NS=3;LV=0     GT    1|2|3|

Agora, a última coluna, a décima, aparece como muitos números divididos por uma barra vertical |; no entanto, o que desejo alcançar é o seguinte:

#CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT  recombination
chr1    586001  >63041388>63041391      G       A       60      .       AC=80;AF=0.3125;AN=256;AT=>63041388>63041390>63041391,>63041388>63041389>63041391;NS=3;LV=0     GT    1|1    2|2    3|3

Consegui separar as colunas tabsubstituindo o |símbolo, o que me deixa com a forma de duplicá-las e adicionar novamente os |números entre elas. Tentei algumas vezes com forloops, mas o melhor que consegui fazer foi imprimir apenas duas colunas como tal:

1    1
2    2
3    3
...

caso contrário, printfobtenho uma saída de uma linha, mas não consigo manter o contador com o mesmo valor da coluna inicial... Qualquer ajuda é muito apreciada, obrigado antecipadamente!

text-processing
  • 2 respostas
  • 163 Views
Martin Hope
Ronnie
Asked: 2024-11-06 01:28:27 +0800 CST

Em uma lista de caminhos de arquivo em um arquivo RTF, conte e classifique a saída com base no número de ocorrências de cada nome de arquivo

  • 6

Tenho um arquivo RTF que contém uma lista de caminhos de arquivos PDF. Como

Category1:
./Folder1/Folder2/1.pdf:18
./Folder3/2.pdf:18
./Folder5/4.pdf:10

Category2:
./Folder3/2.pdf:18
./Folder5/4.pdf:10

Category3:
./Folder1/Folder2/1.pdf:18
./Folder5/4.pdf:10

Category4:
./Folder6/7.pdf:10
./Folder5/4.pdf:10
./Folder3/2.pdf:18

SideNote: O número num depois de *.pdf:num pode ser ignorado. O caminho completo da pasta também pode ser ignorado. A entidade de interesse é apenas o nome do arquivo.pdf

Gostaria de ter uma saída classificada com relação aos nomes de PDF e seu número de ocorrências

A saída estaria no formato (nome do arquivo: número de vezes que o arquivo apareceu no rtf), como:

4.pdf :  4
2.pdf :  3

Nota 2: Qualquer arquivo mencionado menos de 3 vezes pode ser ignorado.

text-processing
  • 4 respostas
  • 65 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