Encontre e exclua linhas contendo vários padrões em um arquivo

1

Eu tenho uma lista de strings e quero encontrar e excluir linhas contendo essas strings em um arquivo. Um pequeno exemplo da lista de strings é listado abaixo.

Arquivo S

1Mo 32,33
2Mo 7,26
2Mo 7,27
2Mo 7,28

E um pequeno exemplo do arquivo é o seguinte.

Arquivo A

1Mo 32,33 I love you.
2Mo 7,26  I like you.
Hi 1,2  This is not so fun.
Ab 3,4  I am stupid.

Minha saída esperada é assim:

Hi 1,2  This is not so fun.
Ab 3,4  I am stupid.

Eu tentei usar o seguinte comando, mas infelizmente falhei:

grep -f file S  file A|awk '{print $0}'

Pesquisei a questão relacionada, mas a maioria deles se concentra em excluir a linha com um padrão específico. Alguém sabe como lidar com esse problema? Thx.

    
por hui 21.11.2015 / 19:39

3 respostas

1

$ grep -vF -f file_S file_A
Hi 1,2  This is not so fun.
Ab 3,4  I am stupid.

Isso usa as strings em file_S para obter as linhas em file_A que não contêm nenhuma dessas strings.

-v inverte o sentido da correspondência para que as linhas sem correspondência sejam passadas, e -F diz grep para tratar as cadeias como cadeia fixa e não como expressões regulares.

    
por 01.02.2018 / 15:00
1

Em AWK , o código seria:

NR == FNR {
    line[$0]++;
    next;
}
!line[$1" "$2]

Como um forro:

awk 'NR == FNR {line[$0]++; next;} !line[$1" "$2]' file_S file_A
    
por 04.03.2016 / 23:27
-3
awk -F "|" '{if($1 != "1Mo") if($1 != "2Mo" ) { print $0;}}' inputFile > OutputFile
    
por 01.02.2018 / 14:42