我有一个包含单个行号的文本文件,比如"123 2345 432 487 11“。我想取每个数字的对数(ln),并将其保存为文本文件。我尝试过,但无法将bc -l命令和awk结合起来。你知道我该如何实现它吗?
awk '{for(i=1;i<=NF;i++) $i = l($i) | bc -l }' text.txt发布于 2018-11-24 00:22:14
你并不需要bc,因为awk有一个非常好的“日志”函数:
awk '{for(i=1;i<=NF;i++)print log($i)}' input.txt如果您希望查看更精确的值,请使用printf而不是print。例如:
awk '{for(i=1;i<=NF;i++)printf "%.12f\n",log($i)}' input.txt如果您真的想使用bc,您可以在没有awk的情况下实现这一点,方法是使用shell printf命令(这与awk printf命令类似但不同;一个很大的区别是shell命令会重复该格式,直到它耗尽参数为止)来构造bc的输入:
printf "l(%s);\n" $(<input.txt) | bc -l或者,如果input.txt有大量数据
xargs printf "l(%s);\n" <input.txt | bc -l发布于 2018-11-24 00:06:02
试试这个:
awk '{for(i=1;i<=NF;i++)system("echo l\\("$i"\\)|bc -l")}' input.txt > output.txt以下哪项输出:
4.81218435537241749526
7.76004068088037973937
6.06842558824411031185
6.18826412308258979072
2.39789527279837054406https://stackoverflow.com/questions/53438704
复制相似问题