【问题标题】:Convert an ascii file column in integer将 ascii 文件列转换为整数
【发布时间】:2015-05-06 10:40:54
【问题描述】:

我有一个包含两列的文件,以空格分隔。第一列是整数,但第二列是双精度。我的文件格式如下

1 201.45
2 201.42
3 202.92

...

我想要做的是用两个整数列打印同一个文件。新文件应该是这样的

1 201
2 201
3 203

...

我尝试使用 awk 给出以下命令

awk '{print $1 " " (int) $2}' file.dat

但正如预期的那样,它不起作用。

关于如何做到这一点的任何想法?

【问题讨论】:

  • 我认为你想要四舍五入,否则我建议sed 's/\..*//g'
  • @Sobrique:非常感谢您的评论!四舍五入应该可以工作!
  • C++ AND Perl AND awk???请选择一种语言。
  • @SinanÜnür :我只是标记了所有这些语言,因为在不同的语言中这可能是一项更容易的任务,因为它们或多或少是相同的......
  • s/或多或少相同/基于相似的语法,但在实际使用中却大不相同/:-)。

标签: c++ perl awk grep integer


【解决方案1】:

字面上只需要加0.5

awk '{print $1,int($2+0.5)}' file.dat

【讨论】:

  • 非常感谢您的回答!诀窍是使用 int($2) 而不是 (int) $2 ,就像您在 c++ 中所做的那样。非常感谢您的帮助!
  • @Thanos (int)$2 在 C++ 中将是一个演员表。 awk 中没有 no 类型转换。 int() 是一个函数。 awk 是一种非常精简的类 C 语言,带有一些用于文本处理的花里胡哨。不要假设您可以在 C/C++ 中执行的操作也可以在 awk 中执行,反之亦然。从 Arnold Robbins 的《Effective Awk Programming, 4th Edition》一书中学习它,就像它是一门新语言一样。
  • @EdMorton true 它更像 c++ 中的trunc() 函数。
【解决方案2】:

perl 怎么样:

perl -lne "print join ( ' ', map { int $_ + 0.5 } split);" file.dat

给予:

1 201
2 201
3 203

注意:诀窍是 - 添加 0.5,因为 int 向下舍入,所以这给出了所需的结果。

【讨论】:

    猜你喜欢
    • 2014-09-03
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    相关资源
    最近更新 更多