我有一个文件(.txt格式),其中包含以下列:
# DM Sigma Time (s) Sample Downfact
78.20 7.36 134.200512 2096883 70
78.20 7.21 144.099904 2251561 70
78.20 9.99 148.872384 2326131 150
78.20 10.77 283.249664 4425776 45
我想编写一个bash脚本,将“Time”列中的所有值除以0.5867,得到最多2个小数点的精度,并在另一个文件out.txt中打印出结果值
我尝试使用bc/awk,但它给出此错误。
awk: cmd. line:1: fatal: division by zero attempted
awk: fatal: cannot open file `file' for reading (No such file or directory)
有人能帮我吗?谢谢。
这是我尝试的bash脚本:
cat in.txt | while read DM Sigma Time Sample Downfact; do
echo "$DM $Sigma $Time $Sample $Downfact"
pperiod = 0.5867
awk -v n=$Time 'BEGIN {printf "%.2f\n", (n/$pperiod)}'
#echo "scale=2 ; $Time / $pperiod" | bc
#echo "$subint" > out.txt
done
我希望脚本将列“Time”除以pperiod,得到精确到2位小数的结果。
1条答案
按热度按时间mccptt671#
当前
awk
代码 存在 许多 问题 :$pperiod
变量 的 值Time
列 ( 本 例 中 为$3
)BEGIN{}
块 在 处理 任何 输入 行 之前 应用 , 并且 与 实际 输入 行 的 处理 无关divide by zero
场景 中 要 做 什么 ( 在 这种 情况 下 , 我们 将 默认 答案 为0.00
)divide by zero
错误 , 因为$pperiod
是 未 定义 得 (awk
) 变量 , 而 该 变量 得 默认 值 为0
pperiod = 0.5867
是 无效bash
语法解决 当前 问题 的 一 个 想法 是 :
中 的 每 一 个
其中 :
-v pp="${pperiod}"
- 将bash
变量"${pperiod}"
的 值 赋 给awk
变量pp
NR>1
- 跳过 标题 行(pp==0 ? 0 : ($3/pp))
- 如果pp
等于 0 , 则 打印0
, 否则 打印$3/pp)
的 结果 ( 这 会 阻止 我们 生成divide by zero error
)cat|while
循环 的 需要这 会 产生 :
格式