在UNIX中用XXX掩码字段替换字段中的一些敏感字符

时间:2017-12-28 12:26:12

标签: csv unix

我有一个表已导出到UNIX中的文件,该文件具有CSV格式的数据,例如:

文件1:

ACCT_NUM,EXPIRY_DT,FIRST_NAME,LAST_NAME
123456,09-09-2019,Prisi,Kumar

现在我需要屏蔽ACCT_NUM和FIRST_NAME并替换文件1中的屏蔽值,输出应该看起来像这样

文件2:

ACCT_NUM,EXPIRY_DT,FIRST_NAME,LAST_NAME
123XXX,09-09-2019,PRXXX,Kumar

我有数字和字符串字段的单独屏蔽功能,我需要知道如何替换原始文件中的屏蔽列。

1 个答案:

答案 0 :(得分:0)

我不确定你想要对FNR做什么,以及分配给数组a的重点是什么。我就是这样做的:

$ cat x.awk
#!/bin/sh

awk -F, -vOFS=, '  # Set input and output field separators.
NR == 1 {          # First record?
   print           # Just output.
   next            # Then continue with next line.
}

NR > 1 {                      # Second and subsequent record?
   if (length($1) < 4) {      # Short account number?
       $1 = "XXX"             # Replace the whole number.
   } else {
       sub(/...$/, "XXX", $1) # Change last three characters.
   }
   if (length($3) < 4) {      # Short first name number?
       $3 = "XXX"             # Replace the whole name.
   } else {
       sub(/...$/, "XXX", $3) # Change last three characters.
   }
   print                      # Output the changed line.
}'

表演时间!

$ cat input
ACCT_NUM,EXPIRY_DT,FIRST_NAME,LAST_NAME
123456,09-09-2019,Prisi,Kumar
123,29-12-2017,Jim,Kirk
$ ./x.awk < input
ACCT_NUM,EXPIRY_DT,FIRST_NAME,LAST_NAME
123XXX,09-09-2019,PrXXX,Kumar
XXX,29-12-2017,XXX,Kirk