结合正则表达式awk和bc

时间:2018-11-22 22:34:38

标签: bash unix

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

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

2 个答案:

答案 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