#!/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ávelvaluedo awk como o primeiro argumento do shell script. - Para cada linha, se a condição
$column == valuefor verdadeira, o código nas chaves é executado.-
$columné o conteúdo do número da colunacolumn(começando em 1). -
++removedincrementa um contador de linhas removidas. A variável começa em 0. -
nextpula para a próxima linha de entrada, para que a instruçãoprintnão seja executada quando a condição for verdadeira.
-
-
1 {print}imprime todas as linhas que não fizeram com que a diretivanextfosse 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.