如何用awk批量替换文本文件第2、3、5列的0为空字符?
如何用awk同时替换多列中指定值为空格?
问题描述
我有一个包含如下内容的文本文件:
P383 0 II-5 2 0 1/2 0 0 42.7 0 54.67 0 T528 0 P383 2 0 1/2 0 0 0 0 34.06 0 T529 III-8 0 2 0 0 0 0 0 0 37.74 0 T530 III-8 0 2 0 0 0 0 0 0 36.73 0 3B888 III-4 III-5 2 0 1/2 38.4 0 0 0 44.38 0
我希望将文件中第2、3、5列的0替换为空格(" "),已经知道单列替换的awk命令:
awk '$3=="0"{$3=" "}; {print}' file
但不知道如何同时处理这三列,期望输出如下:
P383 II-5 2 1/2 0 0 42.7 0 54.67 0 T528 P383 2 1/2 0 0 0 0 34.06 0 T529 III-8 2 0 0 0 0 0 37.74 0 T530 III-8 2 0 0 0 0 0 36.73 0 3B888 III-4 III-5 2 1/2 38.4 0 0 0 44.38 0
解决方案
没问题,这其实非常简单——你只需要把单列的判断逻辑依次应用到第2、3、5列即可。awk允许你在同一个脚本里写多个条件判断语句,每个语句处理对应的列。
完整的awk命令如下:
awk '$2=="0"{$2=" "} $3=="0"{$3=" "} $5=="0"{$5=" "} {print}' file
命令解释:
$2=="0"{$2=" "}:检查第2列的值是否为0,如果是就替换成空格$3=="0"{$3=" "}:对第3列执行同样的判断和替换操作$5=="0"{$5=" "}:对第5列执行同样的判断和替换操作{print}:处理完所有列的判断后,打印修改后的整行内容
执行这个命令后,就能得到你期望的输出效果——指定列的0都会被替换成空格,其他列的内容保持不变。
内容的提问来源于stack exchange,提问作者user2380782
相关产品推荐
相关产品推荐

