Combining regex awk and bc



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

awk '{for(i=1;i<=NF;i++) $i = l($i) | bc -l }' text.txt

您并不真正需要bc,因为awk有一个非常好的"日志"功能:

awk '{for(i=1;i<=NF;i++)print log($i)}' input.txt

如果要更精确地查看值,请使用printf而不是打印。例如:

awk '{for(i=1;i<=NF;i++)printf "%.12fn",log($i)}' input.txt

如果你真的想使用bc,你可以在没有awk的情况下使用,例如,shellprintf命令(它与awk-printf命令相似但不相同;一个很大的区别是shell命令重复格式,直到参数用完为止(来制作bc的输入:

printf "l(%s);n" $(<input.txt) | bc -l

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

xargs printf "l(%s);n" <input.txt | bc -l

试试这个:

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.39789527279837054406

最新更新