【问题标题】:How to truncate of a real value and discard its non-integer part in awk?如何截断真实值并在awk中丢弃其非整数部分?
【发布时间】:2011-02-17 10:20:37
【问题描述】:

我有以下数据集(所有正值)

输入文件

1 2.3456
1 5.02
2 3.9763333
2 0.123

我想截断第二列中的数字并丢弃其非整数部分。

如何在 awk 中做到这一点?

所需的输出文件

1 2
1 5
2 3
2 0

感谢您的帮助。

【问题讨论】:

    标签: awk


    【解决方案1】:

    试试 int() 函数

    awk '{$2=int($2)}1' file
    

    【讨论】:

    • 注意,这与 printf 中的 %d 相同,并向下取整,3.9763333 将打印为 3
    【解决方案2】:
    awk '{printf("%d %d\n"), $1, $2;}' inputFileName
    

    【讨论】:

    • 注意,%d 向下取整,3.9763333 将打印为 3
    【解决方案3】:

    由于您要截断而不是舍入,请使用%d 而不是%0.f

    awk '{printf "%s %d\n", $1, $2}'
    

    【讨论】:

      【解决方案4】:

      以下应该这样做

      { printf "%s %.0f\n", $1, $2}
      

      【讨论】:

      • %d 优于 %.0f,因为 %.0f 循环和 %d 截断。
      【解决方案5】:

      我给每个人都投了赞成票,但为了好玩,这里还有一个:)

      awk '{split($2,a,"."); print $1" "a[1]}'
      

      【讨论】:

      • 怎么样:awk -F"[ \t.]" '{print $1, $2}' file。无需创建额外的数组。 :)
      • @kurumi:看起来不错,但如果第一个数字有重点怎么办?但是我们可以使用$(NF-1)
      【解决方案6】:

      如果其他人搜索如何设置数字,例如 -0.1 转换为 -1,您可以执行以下操作:

      $ printf %s\\n -1 -.9 -.1 0 .1 .9 1|awk '{x=int($0);print(x==$0||$0>0)?x:x-1}'
      -1
      -1
      -1
      0
      0
      0
      1
      

      【讨论】:

        猜你喜欢
        • 2017-09-22
        • 2017-08-08
        • 1970-01-01
        • 1970-01-01
        • 2015-07-10
        • 2014-09-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-04
        相关资源
        最近更新 更多