我有一个包含单行号的文本文件,例如“ 123 2345 432 487 11”。我想取每个数字的对数(ln)并将其保存为文本文件。 我尝试过,但无法将bc -l命令和awk结合使用。窦,你知道我该怎么实施吗?
awk '{for(i=1;i<=NF;i++) $i = l($i) | bc -l }' text.txt
答案 0 :(得分:1)
由于awk具有完美的“日志”功能,因此您实际上并不需要bc
:
awk '{for(i=1;i<=NF;i++)print log($i)}' input.txt
如果要更精确地查看值,请使用printf
而不是打印。例如:
awk '{for(i=1;i<=NF;i++)printf "%.12f\n",log($i)}' input.txt
如果您确实要使用bc
,则可以使用awk
这个命令(例如,shell bc
与awk printf命令相似但不相同;一个很大的不同是shell命令重复格式,直到用完参数为止:
printf
或者,如果printf "l(%s);\n" $(<input.txt) | bc -l
有很多数据
input.txt
答案 1 :(得分:0)
尝试一下:
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