在UNIX中替换负值

时间:2018-09-21 16:31:36

标签: unix

团队,

我有如下所示的管道分隔文件,

100|0.0|yyy|zzz
200|3.5|www|ttt
300|-5.134|uuu|kkk
400|-9.823798|ooo|ppp

我需要将零和负值替换为“ NA”。

预期输出:

100|NA|yyy|zzz
200|3.5|www|ttt
300|NA|uuu|kkk
400|NA|ooo|ppp

请对此提供帮助。

2 个答案:

答案 0 :(得分:1)

AWK将是一个很好的工具。

awk 'BEGIN{FS="|"} 
{for(i=1; i <= NF; i++) {if($i > 0){out=out"|"$i}else{out=out"|NA"}}; 
print substr(out,2)}'

我们将字段分隔符(FS)设置为“ |”
循环遍历所有字段编号(1到NF)。 如果大于0,则附加| $ i,管道加字段值。
如果没有,我们附加| NA。
循环完成后,我们打印的第一个字符仍然是管道。

请注意,现在已经完成了ascii比较。

答案 1 :(得分:1)

awk -F\| '{sub(/^-.*|^0.*/,"NA",$2)}1' OFS=\| file

100|NA|yyy|zzz
200|3.5|www|ttt
300|NA|uuu|kkk
400|NA|ooo|ppp