Das sed
Programm dies tut, wird gut:
sed '2,$s/,[^,]*,/,*****,/'
Die 2,$
nur auf den Linien 2 bis zum Ende der Datei arbeitet ((nur die Kopfzeile zu belassen) und der Ersatzbefehl s/,[^,]*,/,*****,/
ersetzt alles zwischen dem ersten und zweiten Komma mit der Maske *****
.
Bitte beachte, dass ich speziell eine Fest verwendet haben Anzahl der Sterne in der Ersatzzeichenfolge. Ob Sie Passwörter verstecken oder Daten anonymisieren (wie es hier der Fall zu sein scheint), möchten Sie nicht irgendwelche Informationen lecken, einschließlich der Größe der Namen ersetzt werden.
Wenn Sie wirklich die gleiche Anzahl von Zeichen wie in den ursprünglichen Daten verwenden wollen, und Sie wollen auch die Möglichkeit des Ersatzes mehr Felder gerecht zu werden, können Sie so etwas wie verwenden:
awk -F, 'BEGIN{OFS=FS}NR==1{print;next}{gsub(/./,"*",$2);gsub(/./,"*",$4);print}'
Diese
verlassen wird auch die erste Zeile unangetastet aber anonymisieren Spalten zwei und vier (wenn auch mit dem Informationsleck bereits erwähnt):
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,*****
Mehrere Spalten mit voll Anonymisierung würde die Verwendung von $2="*****"
anstelle der gsub
(für beide Spalten natürlich) führen.
Vinay, in Ihrer erwarteten Ausgabe verwendeten Sie eine Anzahl von Sternchen, die gleich der Länge von "second_name" ist. Ist dies Ihr gewünschtes Verhalten oder können Sie, wie in einigen Antworten angenommen, eine feste Anzahl von Sternchen akzeptieren? Ich muss hinzufügen, dass, wenn Sie die Daten verschleiern möchten, eine feste Anzahl von Sternchen eine bessere Wahl sein könnte. – gboffi
* sollte auf der Länge dieses Feldes basieren. – vinay24
Das Ändern Ihrer Frage in einer grundlegenden Weise, die * alle * aktuellen Antworten ungültig macht, wird als schlechte Form angesehen. Eine neue Frage sollte als neue Frage gestellt werden. – paxdiablo