使用awk替换两列中的值
嗨,我有一个像这样的文本文件使用awk替换两列中的值,awk,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
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替换为“”(空白),我知道如何为一列执行此操作
期望的输出是
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
我知道如何为一个专栏做这件事
awk '$3=="0"{$3=" "}; {print}' file
但是我如何同时为三个专栏做这件事呢
感谢以下
awk
可能会对您有所帮助
awk '{$2=$2==0?"":$2;$3=$3==0?"":$3;$5=$5==0?"":$5;} 1' OFS="\t" Input_file
解决方案2:添加一个更通用的解决方案,通过该解决方案,您可以按如下方式传递函数中的字段数
awk '
function check_fields(a){
num=split(a,array,",");
for(i=1;i<=num;i++){
$array[i]=$array[i]==0?"":$array[i]}
}
check_fields("2,3,5")
1
' OFS="\t" Input_file
awk'
功能检查_字段(a){
num=拆分(a,数组,“,”);
对于(i=1;ithanks@jnevil,但此命令awk'$2==“0”;$3==“0”;$5==“0”{$2=”“;$3=“”;$5=”“;print}”文件
未生成所需的输出,请详细说明答案?
awk '
BEGIN { split("2 3 5", tmp); for (i in tmp) flds[tmp[i]] }
{ for (i in flds) if ($i == 0) $i = ""; print }
' file