adicione “#” no início das linhas selecionadas no Arquivo

2

Requisito: ADICIONAR alguma coisa (ou seja, #) no início de cada linha no arquivo A que é grep do arquivo B

Arquivo A

abcd
abdc
sdfg
asdfa
jon
ram

Arquivo B

jon
abcd

grep arquivo B do arquivo A e adicione o caractere "#" no início do arquivo no arquivo A

out put shoude be

#abcd
abdc
sdfg
asdfa
#jon
ram
    
por Daya 08.04.2013 / 11:44

2 respostas

3

Um caminho:

awk 'NR==FNR{a[$0];next}$0 in a{printf "#";}1'  fileB fileA

Explicação:

NR==FNR{a[$0];next} = > O awk lê o arquivo em um array.

$0 in a{printf "#";} = > Se qualquer linha de arquivo A corresponder a algum conteúdo da matriz, coloque um # no começo.

1 = > Imprima cada linha de arquivoA

Usando sed:

$ x=$(sed -e :a -e 'N;s/\n/\|/;ta' FileB)
$ sed "s/$x/#&/" FileA

O primeiro comando sed prepara uma string onde todas as linhas são unidas como uma string e são delimitadas por um "|" e armazenado em $ x. O segundo sed insere um # no início para uma linha correspondente a qualquer um dos padrões armazenados na variável $ x.

    
por 08.04.2013 / 11:55
0

Consegui fazer isso com o seguinte oneliner:

sed "$(for str in $(cat fileB); do echo -n "s/$str/#
sed "$(for str in $(cat fileB); do echo -n "s/$str/#%pre%/; "; done;)" fileA
/; "; done;)" fileA

O comando sed é construído em um subshell fazendo o loop sobre o arquivoB. Em seguida, isso é usado para substituir as linhas correspondentes por um # e a linha correspondente.

    
por 10.04.2013 / 09:19