/ / Reemplazar un carácter con # (hash symble) solo en el quinto y sexto campo - perl, replace, awk

Reemplace un carácter con # (hash symble) solo en el quinto y sexto campo - perl, replace, awk

Estoy tratando de reemplazar un personaje con # (hashsymble) solo en el quinto y sexto campo. p.ej. Tengo que reemplazar "Z" con "#" solo en el quinto y sexto campo (usando el script perl o AWK). Y los campos restantes que contienen el símbolo "Z" no deberían verse afectados.

(solo estoy actualizando la publicación para reemplazar la comilla doble (") en lugar de Z por #. ¿Puedo lograr esto? gracias por su valiosa ayuda) por ejemplo: archivo i / p:

aa",bb,ccc,ddd,eee",ddd",fff
aa1",ba1,ccc1,"ddd1,eee"1,ddd1,fff1
z,aa2,bb2",ccc2,ddd2","eee2",ddd2,fff2"

Archivo O / p esperado:

aa",bb,ccc,ddd,eee#,ddd#,fff
aa1",ba1,ccc1,#ddd1,eee#1,ddd1,fff1
aa2,bb2",ccc2,ddd2#,#eee2#,ddd2,fff2"

Gracias.

Respuestas

0 para la respuesta № 1

Dado que solo hay dos archivados, se puede omitir el bucle.

awk -F, -v OFS=, "{gsub(/Z/,"#",$5);gsub(/Z/,"#",$6)} 1" file
x,aaZ,bb,ccc,ddd,eee#,dddZ,fff
y,aa1Z,ba1,ccc1,#ddd1,eee#1,ddd1,fff1
z,aa2,bb2Z,ccc2,ddd2#,#eee2,ddd2,fff2Z

Para reemplazar " en quinto y sexto campo:

awk -F, -v OFS=, "{gsub(/"/,"#",$5);gsub(/"/,"#",$6)} 1" file
aa",bb,ccc,ddd,eee#,ddd#,fff
aa1",ba1,ccc1,"ddd1,eee#1,ddd1,fff1
z,aa2,bb2",ccc2,ddd2#,#eee2#,ddd2,fff2"

1 para la respuesta № 2
$ awk "BEGIN{FS=OFS=","} {for (i=5;i<=6;i++) gsub(/Z/,"#",$i)} 1" file
x,aaZ,bb,ccc,ddd,eee#,dddZ,fff
y,aa1Z,ba1,ccc1,#ddd1,eee#1,ddd1,fff1
z,aa2,bb2Z,ccc2,ddd2#,#eee2,ddd2,fff2Z

0 para la respuesta № 3

Aquí hay una manera Perl de hacer el trabajo:

perl -anF, -e "$"=","; s/Z/#/ for (@F)[4,5];print"@F";" < in1.txt

Si tienes mutiple Z en un campo, podrías usar:

perl -anF, -e "$"=","; s/Z/#/g for (@F)[4,5];print"@F";" < in1.txt

Salida:

aaZ,bb,ccc,ddd,eee#,ddd#,fff
aa1Z,ba1,ccc1,Zddd1,eee#1,ddd1,fff1
aa2,bb2Z,ccc2,ddd2Z,#eee2,ddd2,fff2Z

Editar de acuerdo al comentario:

in1.txt

aa",bb,ccc,ddd,eee",ddd",fff
aa1",ba1,ccc1,"ddd1,eee"1,ddd1,fff1
aa2,bb2",ccc2,ddd2","eee2,ddd2,fff2"

Mando:

perl -anF"","" -e "$"=",";s/"/#/ for (@F)[4,5];print"@F";" < in1.txt

resultado:

aa",bb,ccc,ddd,eee#,ddd#,fff
aa1",ba1,ccc1,"ddd1,eee#1,ddd1,fff1
aa2,bb2",ccc2,ddd2",#eee2,ddd2,fff2"