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
我只想屏蔽数据的第二列。
输入:
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