Para converter todos os campos do nth para o mth em um comando awk , você não deve codificar os valores; você deve usar um loop "for":
awk 'BEGIN { FS = ","; OFS = ","} {for (i = 3; i <= 4; i++) { $i = "" }; print}' inputfile
Se você deseja excluir um intervalo diferente, ajuste os valores "3" e "4" no código acima.
Explicação:
O bloco BEGIN { ... } é processado antes de olhar para qualquer uma das linhas do arquivo.
OFS define o separador de campo de saída e FS define o separador de campo para entrada. Queremos que ambos sejam vírgulas.
O loop for é como a sintaxe C. Nesse caso, ele executa o seguinte { code block } para i como 3 e como 4.
O $i merece menção porque é totalmente diferente da sintaxe do shell. No shell script, o nome de uma variável deve ser prefixado com $ para expandir para o valor da variável. Não é assim em awk . Em awk , i por si só se expande para seu valor - 3 ou 4 neste caso - e o $ seguido por um número significa o campo nessa posição numerada. Portanto, $i = "" define o campo i th como uma string em branco.
Em seguida, o comando print , fornecido sem argumentos, padroniza a impressão da linha inteira. Na verdade, ele usa todos os campos da linha delimitados por FS e, conforme modificado por qualquer comando anterior, imprime todos eles, separados por OFS e seguidos por uma nova linha no final.
Um comando mais curto equivalente:
Eu sinto que o comando acima é o mais limpo e mais facilmente extensível se você for incluí-lo em um script. É muito explícito sobre o que está fazendo e muito legível. Além disso, tudo pode ser dividido em um script awk autônomo sem alteração; algo que não pode ser feito automaticamente ao usar -v e -F alterna para a invocação awk . (Isso não é razão para não usá-los, é claro. Apenas algo para estar ciente.)
Para um uso único, especialmente, eu usaria o seguinte:
awk -F, -v OFS=, '{for (i = 3; i <= 4; i++) { $i = "" }; print}' inputfile
A opção -F define o valor de FS . A opção -v permite que você defina valores de awk variables na linha de comando.
Em uma nota mais geral, a opção -v pode ser extremamente útil para passar variáveis de shell como variáveis awk: -v myawkvar="$myshellvar" e para alterar o comportamento de tempo de execução de um script awk independente extraído de um arquivo de script com a opção -f scriptname na linha de comando.