#!/bin/sh
awk -v value="$1" -v column="$2" '
$column == value {++removed; next}
1 {print}
END {print removed " lines removed" >"/dev/stderr"}
' <File.txt >File.txt.tmp &&
mv File.txt.tmp File.txt
Explicações:
-
-v value="$1"
define a variávelvalue
do awk como o primeiro argumento do shell script. - Para cada linha, se a condição
$column == value
for verdadeira, o código nas chaves é executado.-
$column
é o conteúdo do número da colunacolumn
(começando em 1). -
++removed
incrementa um contador de linhas removidas. A variável começa em 0. -
next
pula para a próxima linha de entrada, para que a instruçãoprint
não seja executada quando a condição for verdadeira.
-
-
1 {print}
imprime todas as linhas que não fizeram com que a diretivanext
fosse executada. (1
é uma condição sempre verdadeira). -
END {…}
executa o código dentro das chaves no final da entrada. - O código awk grava em um arquivo temporário que é movido para o lugar.