首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组合regex awk和bc

组合regex awk和bc
EN

Stack Overflow用户
提问于 2018-11-23 06:34:38
回答 2查看 87关注 0票数 0

我有一个包含单个行号的文本文件,比如"123 2345 432 487 11“。我想取每个数字的对数(ln),并将其保存为文本文件。我尝试过,但无法将bc -l命令和awk结合起来。你知道我该如何实现它吗?

代码语言:javascript
复制
awk '{for(i=1;i<=NF;i++) $i = l($i) | bc -l }' text.txt
EN

回答 2

Stack Overflow用户

发布于 2018-11-24 00:22:14

你并不需要bc,因为awk有一个非常好的“日志”函数:

代码语言:javascript
复制
awk '{for(i=1;i<=NF;i++)print log($i)}' input.txt

如果您希望查看更精确的值,请使用printf而不是print。例如:

代码语言:javascript
复制
awk '{for(i=1;i<=NF;i++)printf "%.12f\n",log($i)}' input.txt

如果您真的想使用bc,您可以在没有awk的情况下实现这一点,方法是使用shell printf命令(这与awk printf命令类似但不同;一个很大的区别是shell命令会重复该格式,直到它耗尽参数为止)来构造bc的输入:

代码语言:javascript
复制
printf "l(%s);\n" $(<input.txt) | bc -l

或者,如果input.txt有大量数据

代码语言:javascript
复制
xargs printf "l(%s);\n" <input.txt | bc -l
票数 1
EN

Stack Overflow用户

发布于 2018-11-24 00:06:02

试试这个:

代码语言:javascript
复制
awk '{for(i=1;i<=NF;i++)system("echo l\\("$i"\\)|bc -l")}' input.txt > output.txt

以下哪项输出:

代码语言:javascript
复制
4.81218435537241749526
7.76004068088037973937
6.06842558824411031185
6.18826412308258979072
2.39789527279837054406
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53438704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档