为什么条件将非零条件打印为零值?

时间:2019-04-08 16:50:29

标签: shell

我无法从bash代码获得所需的输出。

我有一个文本文件:

1 0.00 0.00    
2 0.00 0.00    
3 0.00 0.08    
4 0.00 0.00    
5 0.04 0.00    
6 0.00 0.00    
7 -3.00 0.00 
8 0.00 0.00   

所需的输出应仅为非零值:

0.08   
0.04   
-3.0

这是我的代码:

z=0.00
while read line
do
line_o="$line"
openx_de=`echo $line_o|awk -F' ' '{print $2,$3}'`   
IFS=' ' read -ra od <<< "$openx_de"
for i in "${od[@]}";do
if [ $i != $z ]
then
echo "openx_default_value is $i"
fi
done
done < /openx.txt

但它也会得到零值。

2 个答案:

答案 0 :(得分:1)

要仅从第2列和第3列中获取非零值,请尝试:

{
        "type": "chrome",
        "request": "launch",
        "name": "Launch Chrome",
        "sourceMaps": true,
        "sourceMapPathOverrides": {
            "webpack:///./*":"${workspaceRoot}/*"
        },
        "url": "http://localhost/CountrySite/v2/",
        "webRoot": "${workspaceRoot}"
    },

工作原理:

$ awk '$2+0!=0{print $2} $3+0!=0{print $3}' openx.txt 0.08 0.04 -3.00 测试以查看第二列是否为非零。如果它不为零,则执行print语句。

我们想在第二列$2+0 != 0 {print $2}和零之间进行数值比较。为了告诉awk将$2视为数字,我们首先向其添加零,然后进行比较。

第3列也是如此。

使用列名

考虑此输入文件:

$2

要使用找到的每个值打印列名称,请尝试:

$ cat openx2.txt 
n  first  second
1  0.00   0.00
2  0.00   0.00
3  0.00   0.08
4  0.00   0.00
5  0.04   0.00
6  0.00   0.00
7 -3.00   0.00    8  0.00  0.00

答案 1 :(得分:1)

awk '{$1=""}{gsub(/0.00/,"")}NF{$1=$1;print}' file 
0.08
0.04
-3.00