Usando o AWK para excluir resultado de linha e saída

0

Eu tenho um arquivo de texto e consigo encontrar a linha através da comparação de saída. Com o título do livro e o nome do autor.

awk -F ':' '/KungFu Feet|Chuck Norris/'  test.txt

Kungfu Feet:Chuck Norris:12:1:1

Existe alguma maneira de excluir a linha usando awk e retornar a saída em um arquivo bash?

EDITAR

Eu gostaria de verificar o seguinte item antes de fazer a exclusão usando o awk

  If (( Book = KungFu Feet  && Author = Chuck Norris )); do
    echo "Item is found unable to delete" 
  else 
    echo "Deleting.."  
    
por Len 27.01.2014 / 18:04

2 respostas

1

A menos que você tenha necessidade de fazer isso com awk , convém tentar algo com grep e sed :

if grep -E "(KungFu Feet|Chuck Norris)" your_file ; then
    # fancy stuff in case string has been matched
    sed -r "/(KungFu Feet|Chuck Norris)/d" < your_file > new_file
else
    # fancy stuff in case it hasn't
fi

Se você precisar de compatibilidade POSIX sed , você terá que expandir o regex para sed ( grep nas versões recentes do POSIX suporta a opção -E ):

sed -r "/KungFu Feet/d;/Chuck Norris/d" < your_file > new_file

Algumas versões do sed também permitem alterações no local por meio da opção -i .

Relendo a resposta, você provavelmente precisará corresponder apenas a "KungFu Feet:Chuck Norris" em sed e grep . Isto é claro, graças ao formato extremamente simples dos seus dados.

    
por 27.01.2014 / 18:58
2

Algo parecido com isso fará o que você deseja:

$ awk -F ':' '!/KungFu Feet|Chuck Norris/'  test.txt | tee newtest.txt
KungFa Feet|Chuck Narris:12:1:1
KungFe Feet|Chuck Nerris:12:1:1

Novo arquivo

$ cat newtest.txt 
KungFa Feet|Chuck Narris:12:1:1
KungFe Feet|Chuck Nerris:12:1:1
    
por 27.01.2014 / 18:16