Unix 编辑数据

Unix redact data

我只想屏蔽数据的第二列。

输入:

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

预期输出:

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

awk 中的另一个。使用 gsub</code> 中的每个字符替换为 <code>*:

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

sed 程序可以很好地做到这一点:

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

2,$ 仅对第 2 行进行操作,直到文件末尾(单独保留 header 行),替换命令 s/,[^,]*,/,*****,/ 将替换第一个之间的任何内容第二个逗号与掩码 *****.


请注意,我在替换字符串中专门使用了 固定 数量的星号。无论您是隐藏密码还是匿名化数据(这里似乎就是这种情况),您都不想泄露 任何 信息,包括被替换的名称的大小。


如果你真的想使用与原始数据中相同数量的字符,并且你也想迎合替换多个字段的可能性,你可以使用一些喜欢:

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

这也将保持第一行不变,但会将第二列和第四列匿名化(尽管存在前面提到的信息泄露):

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(/./,"*",);gsub(/./,"*",);print}'

First_name,second_name,phone_number,other
ram,*******,96174535,***
hari,*******,98888234,***
anurag,******,82783784,*
bob,**********,124,*****

使用匿名化处理多列需要使用="*****"而不是gsub(当然对于两列)。

尝试关注一次,如果这对您有帮助,请告诉我。

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