awk -F '|' -v OFS='|' '$16 == "Market1" { $16 = "MarketPrime" }1' file.csv >new-file.csv
O único problema real em seu código é que você defina o separador de arquivos de entrada para não apenas |
, mas também para espaços. Isso fará com que os espaços sejam contados como separadores de campo nos dados e será incrivelmente difícil descobrir qual é o número do campo correto (já que alguns campos contêm um número variável de espaços).
Você também não pode redirecionar para o mesmo nome de arquivo usado para ler. Isso faria com que o shell truncasse primeiro (vazio) o arquivo de saída, e seu programa awk
não teria dados para ler.
Seu código faz uma substituição de expressão regular. Está tudo bem, mas você precisa estar ciente de que se o 16º campo for algo como Market12
ou TheMarket1
, ele acionaria a substituição devido aos pontos de ancoragem ausentes. Seria mais seguro usar ^Market1$
como a expressão a ser substituída ou usar uma comparação de string.
O comando awk
acima usa apenas |
como um separador de campo e faz uma comparação com o 16º campo. Se esse campo for Market1
, ele será definido como MarketPrime
.
O trailing 1
no final do código awk
faz com que todos os registros (modificados ou não) sejam impressos.