【问题标题】:convert column decimal to binary by bash AWK通过 bash AWK 将列十进制转换为二进制
【发布时间】:2021-08-22 18:11:40
【问题描述】:

输入.txt

09/07/2021 11:08:39.591451 12606 4456531
09/07/2021 11:08:43.801062 12350 4456531
09/07/2021 11:08:49.207881 14398 4472899
09/07/2021 11:08:51.944042 14350 4210691

预期输出.txt

09/07/2021 11:08:39.591451  11000100111110  10001000000000001010011
09/07/2021 11:08:43.801062  11000000111110  10001000000000001010011
09/07/2021 11:08:49.207881  11100000111110  10001000100000001000011
09/07/2021 11:08:51.944042  11100000001110  10000000100000000000011

我想使用 bash AWK 将 column3 & column4 十进制转换为二进制数。我已经尝试过 bash “while read loop”,但是在处理 100k 行大文件时性能太低了。有人可以帮我解决这个问题吗?

【问题讨论】:

  • 将您的代码添加到您的问题中。

标签: awk


【解决方案1】:

there print d2b($0) 替换为$3=d2b($3); $4=d2b($4); print

【讨论】:

  • 短小精悍,物有所值。很好的链接!
  • 完美! 100k 行耗时 13 秒,效率更高。谢谢@Cyrus !!
  • 如果您不介意尝试的话,我很想知道stackoverflow.com/a/68511113/1745001 的版本运行得更快或更慢。如果是这样,请发布这两种解决方案的第 3 次运行时间。
【解决方案2】:

或者dc:

paste -d' ' <(<infile cut -d' ' -f1,2)                                \
            <(<infile (echo 2o; cut -d' ' -f3 | sed 's/$/p/'; ) | dc) \
            <(<infile (echo 2o; cut -d' ' -f4 | sed 's/$/p/'; ) | dc)

输出:

09/07/2021 11:08:39.591451 11000100111110 10001000000000001010011
09/07/2021 11:08:43.801062 11000000111110 10001000000000001010011
09/07/2021 11:08:49.207881 11100000111110 10001000100000001000011
09/07/2021 11:08:51.944042 11100000001110 10000000100000000000011

【讨论】:

  • 虽然性能与awk不匹配——绝对值得一票,例如很少使用的dc:)
猜你喜欢
  • 2019-08-09
  • 2012-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-24
  • 2016-08-28
相关资源
最近更新 更多