Unix redact données

Je souhaite masquer uniquement la 2ème colonne des données.

Consortingbution:

First_name,second_name,phone_number ram,prakash,96174535 hari,pallavi,98888234 anurag,aakash,82783784 

Résultat attendu:

  First_name,second_name,phone_number ram,*******,96174535 hari,*******,98888234 anurag,******,82783784 

Le programme sed fera très bien:

 sed '2,$s/,[^,]*,/,*****,/' 

Le 2,$ ne fonctionne que sur les lignes 2 à la fin du fichier (pour laisser la ligne d’en-tête seule) et la commande de remplacement s/,[^,]*,/,*****,/ remplacera n’importe quoi entre la première et la deuxième virgule avec le masque ***** .


Notez que j’ai spécifiquement utilisé un nombre fixe d’astérisques dans la chaîne de remplacement. Que vous dissimuliez des mots de passe ou que vous anonymisiez des données (comme cela semble être le cas ici), vous ne souhaitez pas divulguer d’ informations, y compris la taille des noms remplacés.


Si vous voulez vraiment utiliser le même nombre de caractères que dans les données d’origine et que vous souhaitez également remplacer plusieurs champs, vous pouvez utiliser quelque chose comme:

 awk -F, 'BEGIN{OFS=FS}NR==1{print;next}{gsub(/./,"*",$2);gsub(/./,"*",$4);print}' 

Cela laissera également la première ligne intacte mais rendra anonymes les colonnes deux et quatre (avec toutefois la fuite d’informations mentionnée précédemment):

 echo 'First_name,second_name,phone_number,other ram,prakash,96174535,abc hari,pallavi,98888234,def anurag,aakash,82783784,g bob,santamaria,124,xyzzy' | awk -F, 'BEGIN{OFS=FS}NR==1{print;next}{gsub(/./,"*",$2);gsub(/./,"*",$4);print}' First_name,second_name,phone_number,other ram,*******,96174535,*** hari,*******,98888234,*** anurag,******,82783784,* bob,**********,124,***** 

Faire plusieurs colonnes avec anonymisation complète impliquerait l’utilisation de $2="*****" plutôt que le gsub (pour les deux colonnes bien sûr).

Un autre dans awk. Utiliser gsub pour remplacer tous les caractères de $2 par un * :

 $ awk 'BEGIN{FS=OFS=","}NR>1{gsub(/./,"*",$2)}1' file First_name,second_name,phone_number ram,*******,96174535 hari,*******,98888234 anurag,******,82783784 

essayez de suivre une fois et laissez-moi savoir si cela vous aide.

 awk -F"," 'NR>1{$2="*******"} 1' OFS=, Input_file