Procura por múltiplos padrões em colunas específicas no arquivo de tamanho fixo e na saída da linha inteira

1

Eu preciso de um comando no Unix para procurar um padrão em colunas específicas em um arquivo de tamanho fixo e enviar a linha inteira para um arquivo diferente.

Exemplo de arquivo1

2345abcdef450022677
1234sdfght350022677
3456abcdef350022677

Eu preciso extrair as linhas se a coluna 5 a 10 = abcdef e a coluna 15 a 16 = 22.

Eu quero que o arquivo de saída tenha os seguintes dados.

2345abcdef450022677
3456abcdef350022677

Eu posso usar o comando cut com grep para encontrar o padrão, mas não sei como produzir a linha inteira.

    
por manchand 24.06.2015 / 21:28

2 respostas

5

Tente isso

$ cat foo
2345abcdef450022677
1234sdfght350022677
3456abcdef350022677
$ grep -E '^.{4}abcdef.{4}22' foo >foo2
$ cat foo2
2345abcdef450022677
3456abcdef350022677
$

ou

$ awk 'substr($0,5,6)=="abcdef" && substr($0,15,2)=="22"' foo >foo2
$ cat foo2
2345abcdef450022677
3456abcdef350022677
$

ou até mesmo

$ grep '^....abcdef....22' foo >foo2
$ cat foo2
2345abcdef450022677
3456abcdef350022677
$

e finalmente, usando sed (cheques de 5 a 10 são abcdef e 15 a 16 são 22 e se não excluir a linha, credite ao usuário112638726 para isso)

sed '/^.\{4\}abcdef.\{4\}22/p;d' foo
    
por 24.06.2015 / 21:37
1

Em sed

sed '/^.\{4\}abcdef.\{4\}22/p;d' file

Verifica se o 5º ao 10º é abcdef e o 15º ao 16º é 22 e, se não excluir a linha

    
por 24.06.2015 / 22:04

Tags