¿Cómo reemplazar el contenido de una columna específica con awk?


31

Dado: hay 40 columnas en un registro. Quiero reemplazar la columna 35 para que la columna 35 se reemplace con el contenido de la columna 35 y un símbolo "$". Lo que vino a mi mente es algo como:

awk '{print $1" "$2" "...$35"$ "$36...$40}'

Funciona pero porque no es factible cuando el número de columna es tan grande como 10k. Necesito una mejor manera de hacer esto.

Respuestas:



8

Probablemente hay formas más eficientes de hacer esto. Con esa advertencia:

awk '{$35 = $35"$"; print}' infile > outfile

3

Si el delimitador de campo es <space>:

sed 's/  */$&/35'

Si se desconoce el delimitador de campo:sed 's/./$&/35'
Inverso

@Underverse: no creo que sea lo mismo. Eso debería anteponer el carácter 35 en una línea de entrada con el carácter $delimitado o no. Lo anterior debe fijar la aparición número 35 de cualquier número de caracteres delimitadores, en otras palabras, el campo número 35, con el carácter $, sin importar la cantidad de caracteres en cada campo.
mikeserv

Ah, "40 columnas en un registro". Leí 'la columna 35' como literalmente 'la columna de 35 caracteres del archivo de texto'.
Underverse

3

Para reservar el Field-Seprator original, hice esto. La columna que quería dejar en blanco era el número $ 12.

awk -F"\t" '{OFS=FS}{ $12="" ; print   }' infile.txt > outfile.txt

Con gawk -i, si lo tiene, puede editar el archivo en su lugar.


1

Tenía problemas al usar las respuestas "aprobadas", reemplazaría más que la primera columna del archivo. Yo uso este comando genérico:

awk '$[column]="[replace]"' FS=, OFS=, inputfile > outputfile

Dónde:

  • [column] = columna que desea cambiar comenzando con 1 (no 0)
  • [replace] = texto que desea reemplazar

awk '$1=mktime($1)' FS=, OFS=, oldfile > newfile ... reemplazó un millón de marcas de tiempo en unos segundos !! :)
roblogic
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.