我正在尝试编写脚本来捕获和屏蔽特定列。我需要在第 4 列中使用明文并在输出文件中对其进行屏蔽。我不知道如何屏蔽同一列
请帮助我重写以下命令或新命令
input.txt
---------
AA | BB | CC | 123456
output.txt
---------
BB | 123456 | 12xx56
我写的脚本
cat input.txt | nawk -F '|' '{print $2 "|" $4 "|" $4} >output.txt
nawk -F '|' '{print $2 "|" $4 "|" substr($4, 1,3) "xx" substr($4,6,2)}' input.txt > output.txt
输出
BB | 123456| 12xx56
假设你真的不需要前导和尾随空格,我会做到的
nawk -F '|' '{gsub(/ */, "", $0);print $2 "|" $4 "|" substr($4, 1,2) "xx" substr($4,5,2)}' input.txt > output.txt
cat output.txt
BB|123456|12xx56
最终解决方案
echo "AA | BB | CC | 12345678" \
| awk -F '|' '{gsub(/ */, "", $0)
#dbg print "length$4=" (length($4)-4)
masking=sprintf("%"(length($4)-4)"s", " ") ; gsub(/ /, "x", masking)
print $2 "|" $4 "|" substr($4, 1,2) masking substr($4,(length($4)-1),2)
}'
BB|12345678|12xxxx78
我echo "..."
用来简化测试过程。您可以将其取出,替换为input.txt > output.txt
和 行尾,它会像以前一样工作。
我添加了(length($4)-1)
以使 $4 上倒数第二个字符的位置动态,基于 $4 中任何单词的长度。
IHTH