【问题标题】:Subtracting floating point numbers in a loop in bash在bash的循环中减去浮点数
【发布时间】:2015-07-24 09:07:16
【问题描述】:

我有一个包含 500 行浮点数的文件。我想要做的是取一行,然后从该行中减去 linenumber 中较低的每一行。一个示例非工作脚本是:

for i in `seq 0 499`; do
       for ((j=0; j<i; j++)); do
               a=$(awk 'NR == i' i=$i inputfile)
               b=$(awk 'NR == j' j=$j inputfile)
               echo $(awk '{c=a-b};END{print c/NR}' a=$a b=$b)
       done
done > outputfile

我不熟悉如何使用 awk,因此我们将不胜感激。谢谢!

例子:

输入:

1
2
3
4
5

输出:

1
2 - 1
3 - 1
3 - 2
4 - 1
4 - 2
4 - 3
5 - 1
5 - 2
5 - 3
5 - 4

除了整数以外,其他都是浮点数,应该计算减法

【问题讨论】:

  • 你能举一个输入和预期输出的例子吗?
  • 抱歉,有点混乱。我添加了一个示例。

标签: bash awk


【解决方案1】:

如果你把它放到 a.awk 中

{
    a[NR] = $1
}
END {
    print a[1]
    for (i = 2; i <= NR; i++) 
        for (j = 1; j < i; j++) 
            print a[i]-a[j]
}

然后运行

awk -f a.awk foo.txt

你会得到你想要的输出。

例如,如果您的输入是

1.2
2.3
3.4
4.5
5.6

你的输出是

1.2
1.1
2.2
1.1
3.3
2.2
1.1
4.4
3.3
2.2
1.1

【讨论】:

    猜你喜欢
    • 2021-02-14
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    相关资源
    最近更新 更多