我有一个包含单行号的文本文件,例如"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