【问题标题】:Multiplying each line of a file by minus one [duplicate]将文件的每一行乘以减一[重复]
【发布时间】:2017-05-08 15:24:46
【问题描述】:

如果我有一个简单的文本文件,其中包含所有负值的数字,我如何使所有这些值都为正值?

例如,如果 test.txt 具有以下值:

-4
-5
-6

我怎样才能使值是积极的?

4
5
6

【问题讨论】:

  • 如果一行包含一个正数怎么办?还是零?如果它包含不是数字的东西怎么办?
  • @ClickRick - 该文件不包含任何非负数。
  • Ed Morton 的答案是最好的,因为不需要计算。
  • 您得到了很多使用 shell 循环的答案 - 请参阅 why-is-using-a-shell-loop-to-process-text-considered-bad-practice 了解不这样做的一些(但不是全部)原因。

标签: bash awk sed


【解决方案1】:
tr -d '-' < file

......................

【讨论】:

    【解决方案2】:

    因此,如果我们将 -1 与任何数字相乘,那么其中一个 MATH 规则将变为它自己的正数(如果它已经是负数),所以类似地我们可以在这里执行如下操作。

    awk '{$0=$0 * -1} 1' Input_file
    

    希望对你有所帮助。

    假设您的 Input_fie 具有以下两个值的负数和正数。

    cat file1
    -4
    -5
    -6
    7
    

    然后我们可以使用下面的代码来避免一切都为负(特别是那些值已经是正的)。

    awk '{$0=$0<0?$0 * -1:$0} 1'  Input_file
    

    希望对你有所帮助。

    【讨论】:

    • 创意,这行得通。谢谢!
    • 强制 awk 重新分割每一行而不是 print $0 * -1 是没有意义的。
    • 那么也许awk '{$1*=-1}1' input_file
    【解决方案3】:

    如果您打算仅在数字为负数时转换为正数:

    while read -r number; do
       [[ number -lt 0 ]] && number=$((-1 * number))
       echo $number
    done < test.txt
    

    【讨论】:

    • 使用 shell 的 while read 循环文件中的行通常是一种反模式。一个简单的 Awk 或 Perl 脚本将是我的解决方案,而且速度可能快一个数量级。
    • @tripleee:我同意你的看法。多亏了 SO,我正在学习 bash 的复杂性。我以为我擅长 bash。但是在这个网站上度过了一段美好的时光之后,男孩,我知道我离坚强还有多远!几年前,我选择 Perl 而不是 awk,对于小型和一次性代码,我倾向于使用纯 bash。
    • 我选择了另一种方式,从 Perl 转向 Awk 以获取小的一次性代码(现在通常使用 Python 来处理我仍会使用 Perl 的任何东西)。无论如何,欢迎来到该网站,并随时查看bash chat room 和/或Stack Overflow bash tag wiki
    【解决方案4】:

    您似乎不想做任何数学运算,而只是删除所有减号。在这种情况下,

    while read line; do echo ${line//-/}; done <test.txt
    

    在不调用外部程序的情况下完成这项工作。它也适用于每行有多个数字的情况。

    【讨论】:

      【解决方案5】:

      好的,我做了以下假设:

      • 您实际上想要文件中数字的数学反义词
      #!/bin/bash
      while read a
      do
          echo -1*$a | bc
      done <test.txt
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多