Como uma extensão da resposta do @Gilles, já que você diz que você tem os números de linha que precisam ser alterados em um arquivo (que eu assumirei como classificado e chamado linums
)
awk '
BEGIN { getline NEXT < "linums" }
NR == NEXT { $0 = "XXXXXXXXXXXXXXX"; getline NEXT < "linums" }
1
'
Isso se adapta bem à alteração de milhares de linhas sem a necessidade de digitar manualmente esses milhares de números de linha.
Como alternativa, com uma pequena modificação, você pode levar os números de linha ou o arquivo a ser alterado em stdin
. Eu faria um script para isso (eu chamei de redact.awk
)
#!/usr/bin/awk -f
BEGIN {
LINUMS = ARGV[1]
ARGV[1] = ARGV[2]
--ARGC
getline NEXT < LINUMS
}
NR == NEXT {
$0 = "XXXXXXXXXXXXXXX"
getline NEXT < LINUMS
}
1
Então você pode usar qualquer um dos seguintes:
$ ./redact.awk linums file-to-be-changed
$ ./redact.awk - file-to-be-changed
$ ./redact.awk linums -
$ ./redact.awk linums
(Os dois últimos são equivalentes)