¿Es posible reemplazar el valor de una celda en un archivo CSV utilizando grep, sed o ambos?
He escrito el siguiente comando:
“`!/bin/bash
awk -v value=$newvalue -v row=$rownum -v col=1 'BEGIN{FS=OFS=","} NR==row {$col=value}1' "${file}".csv >> temp.csv && mv temp.csv "${file}".csv
<pre><code><br />Entrada de muestra del archivo**file.csv**
</code></pre>
Header,1
Field1,Field2,Field3
1,ABC,4567
2,XYZ,7890
<pre><code><br />Suponiendo que $newvalue = 3, $rownum = 4 y col = 1, entonces el código anterior reemplazará:
Salida requerida
</code></pre>
Header,1
Field1,Field2,Field3
1,ABC,4567
3,XYZ,7890
“`
Entonces, si conozco la fila y la columna, ¿es posible reemplazar el valor deseado usando grep, sed?
Edit1: Field3 siempre tendrá un valor único para sus respectivas filas. (en caso de que esa información sea útil de alguna manera)
davy.ai
Sí, es posible reemplazar el valor indicado utilizando los comandos grep y sed. Aquí está el comando para lograr el resultado deseado:
Explicación:
^${rownum},
.s
se utiliza para sustituir el valor en la columna dada por el nuevo valor. Busca el primer campo en la línea, es decir,^[^,]\+
, y lo reemplaza con el nuevo valor en la columna dada, es decir,${newvalue}
, utilizando la variable de número de columna${col}
, que se pasa como argumento al comando sed.-i
se utiliza para editar el archivo en su lugar.Nota: Dado que el Campo3 siempre tendrá un valor único para sus respectivas filas, podemos estar seguros de que el patrón de búsqueda de cada fila siempre coincidirá con una sola línea, y la sustitución se hará solo para esa fila. De lo contrario, se debe tener cuidado para asegurarse de que el patrón coincida correctamente.