我有一个类似于下面的文本文件。这是一个基于位置的文本文件。从13到30的位置代表银行账号,如果存在数字,则需要用星号掩蔽。最好的办法是什么?我的操作系统是Oracle Solaris 11.4
6220750000610032002137 0000404584 MCKENNES JAITLIN C 0071000280000122
622075000079643811983 0000420000 RICHOTTA AMENDA 0071000240000134
632275079784326217002 0000340000 KOHLDECK CARA 0071000230000146
622101205691399004002904006210000610000 MEIER NICHOLAS 0071000270000222
字符串
预期成果
622075000061********** 0000404584 MCKENNES JAITLIN C 0071000280000122
622075000079********* 0000420000 RICHOTTA AMENDA 0071000240000134
632275079784********* 0000340000 KOHLDECK CARA 0071000230000146
622101205691*****************0000610000 MEIER NICHOLAS 0071000270000222
型
我正在尝试下面的命令,但得到一个错误。
gawk '{if (match($0, "[0-9]", 13, 27)) $0 = substr($0, 1, 12) "*" substr($0, 27)}' PAY.EM
gawk: cmd. line:1: {if (match($0, "[0-9]", 13, 27)) $0 = substr($0, 1, 12) "*" substr($0, 27)}
gawk: cmd. line:1:
^ 4 is invalid as number of arguments for match
型
4条答案
按热度按时间yc0p9oo01#
正如@jared_mamrot评论的那样,定义“最好”可能很困难。以下是一个符合posix的解决方案,仅供参考:
字符串
测试结果:
型
vfwfrxfs2#
使用GNU awk(我在你的错误消息中看到,比如你已经在使用的
gawk: cmd. line:1: ...
):字符串
如果你有一个旧版本的gawk,它不支持
*
作为FIELDWIDTHS
的最后一部分来读取该行的其余部分,那么使用FIELDWIDTHS='12 17 99999'
。nlejzf6q3#
你如何定义“最好”?假设文件格式是固定宽度的,使用GNU AWK(不是posix)的一个可能选项是:
字符串
1sbrub3j4#
使用GNU awk
字符串