【问题标题】:how to do arithmatic operations in linux using awk or sed and piping the result to a file如何在 linux 中使用 awk 或 sed 进行算术运算并将结果通过管道传输到文件
【发布时间】:2012-07-15 01:19:28
【问题描述】:

遇到这个问题,我正在用墙壁敲打我的头,请帮忙。

我有两个文件 Sheetthickness.k 包含一个初始厚度值和 minThick.k 包含最终厚度只有一个数字。我想计算厚度减少的百分比,所以我使用了。

fina="$(cat minThick.k)";
echo $fina
init="$(cat Sheetthickness.k)";
echo $init 

echo |awk "{ print ($init-$fina)/($init) }" > LSDynaResponse.txt

在没有其他命令并且文件已经存在的shell中,它可以正常工作,但是当文件由软件创建然后使用这些命令时,它会出错。

awk: { print (-)/() }  
awk:           ^ syntax error
awk: { print (-)/() }
awk:            ^ syntax error
awk: { print (-)/() }
awk:             ^ unterminated regexp

还有其他优雅的方式来完成这项任务吗?

【问题讨论】:

  • @perreal:这是不正确的。您要么需要使用echo 通过stdin 给AWK 一些东西来消费,要么在BEGIN 块中进行计算。否则它将挂起等待输入。

标签: linux awk arithmetic-expressions


【解决方案1】:

听起来你有空文件或根本没有文件,试试这样:

fina="$(cat minThick.k)"       || echo "No min file!!"
[[ -z $fina ]]                 && echo "Null min value!!"
echo $fina
init="$(cat Sheetthickness.k)" || echo "No init file!!"
[[ -z $init ]]                 && echo "Null init value!!"
echo $init
echo "($init-$fina)/($init)"   | bc -l > LSDynaResponse.txt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 2017-03-22
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多