Você pode fazer assim:
awk '$35=$35"$"'
Dado: há 40 colunas em um registro. Quero substituir a 35ª coluna para que a 35ª coluna seja substituída pelo conteúdo da 35ª coluna e um símbolo "$". O que me veio à mente é algo como:
awk '{print $1" "$2" "...$35"$ "$36...$40}'
Funciona, mas porque é inviável quando o número de colunas é tão grande quanto 10k. Eu preciso de uma maneira melhor de fazer isso.
Provavelmente, existem maneiras mais eficientes de fazer isso. Com essa ressalva:
awk '{$35 = $35"$"; print}' infile > outfile
Se o delimitador de campo for <space>
:
sed 's/ */$&/35'
Teve problemas usando as respostas "aprovadas", isso substituiria mais do que apenas a primeira coluna no arquivo. Eu uso este comando genérico:
awk '$[column]="[replace]"' FS=, OFS=, inputfile > outputfile
Onde:
[column]
= coluna que você deseja alterar começando com 1 (não 0) [replace]
= texto que você deseja substituir Para reservar o separador de campo original, eu fiz isso. A coluna que eu queria anular foi de $ 12.
awk -F"\t" '{OFS=FS}{ $12="" ; print }' infile.txt > outfile.txt
Com gawk -i
, se você tiver, poderá editar o arquivo no lugar.
Tags text-processing awk linux replace