Como substituir o conteúdo de uma coluna específica por awk?

23

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.

    
por Marcus Thornton 10.06.2014 / 05:40

5 respostas

28

Você pode fazer assim:

awk '$35=$35"$"'
    
por 10.06.2014 / 05:53
8

Provavelmente, existem maneiras mais eficientes de fazer isso. Com essa ressalva:

awk '{$35 = $35"$"; print}' infile > outfile
    
por 10.06.2014 / 05:54
2

Se o delimitador de campo for <space> :

sed 's/  */$&/35'
    
por 10.06.2014 / 05:57
1

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
por 18.10.2017 / 17:45
1

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.

    
por 15.11.2017 / 20:21