awk + remove linhas duplicadas, mas ignora as linhas que começam com #

1

Eu uso o seguinte awk para remover linhas duplicadas do arquivo /etc/fstab no Linux.

O problema que também remove as linhas que começam com # .

Como posso alterar a sintaxe awk para ignorar as linhas que começam com # no arquivo?

awk '!a[$0]++'  /etc/fstab > /etc/fstab.new
cp /etc/fstab.new /etc/fstab
    
por yael 12.07.2017 / 10:56

1 resposta

3

Diga ao AWK para aceitar linhas que começam com # , bem como linhas não duplicadas:

awk '/^#/ || !a[$0]++' /etc/fstab > /etc/fstab.new

Se você quiser evitar fazer isso se não houver linhas duplicadas (por seus comentários), você pode usar algo como

if awk '!/#^/ && a[$0]++ { dup = 1 }; END { exit !dup }' /etc/fstab; then
    awk '/^#/ || !a[$0]++' /etc/fstab > /etc/fstab.new
    copy /etc/fstab.new /etc/fstab
fi

mas isso termina o trabalho duas vezes com eficácia.

    
por 12.07.2017 / 10:58

Tags