我对使用awk有点陌生。我的目标是创建一个bash函数的表单:
myfunction file column value它获取文件中给定的列号,将其乘以值并重写文件。就目前而言,我写了以下几点:
function multiply_column {
file=$1
column=$2
value=$3
awk -F" " '{print $col*mul}' col=$column mul=$value $file
}我的档案是这样的:
0.400000E+15 0.168933E+00 -0.180294E-44 0.168933E+00
0.401000E+15 0.167689E+00 -0.181383E-44 0.167689E+00
0.402000E+15 0.166502E+00 -0.182475E-44 0.166502E+00
0.403000E+15 0.165371E+00 -0.183569E-44 0.165371E+00
0.404000E+15 0.164298E+00 -0.184666E-44 0.164298E+00
0.405000E+15 0.163284E+00 -0.185766E-44 0.163284E+00
0.406000E+15 0.162328E+00 -0.186868E-44 0.162328E+00
0.407000E+15 0.161431E+00 -0.187972E-44 0.161431E+00
0.408000E+15 0.160593E+00 -0.189080E-44 0.160593E+00
0.409000E+15 0.159816E+00 -0.190189E-44 0.159816E+00
0.410000E+15 0.159099E+00 -0.191302E-44 0.159099E+00
0.411000E+15 0.158442E+00 -0.192416E-44 0.158442E+00
0.412000E+15 0.157847E+00 -0.193534E-44 0.157847E+00
0.413000E+15 0.157312E+00 -0.194653E-44 0.157312E+00
0.414000E+15 0.156840E+00 -0.195775E-44 0.156840E+00
0.415000E+15 0.156429E+00 -0.196899E-44 0.156429E+00
0.416000E+15 0.156081E+00 -0.198026E-44 0.156081E+00
0.417000E+15 0.155796E+00 -0.199154E-44 0.155796E+00
0.418000E+15 0.155573E+00 -0.200285E-44 0.155573E+00
0.419000E+15 0.155413E+00 -0.201418E-44 0.155413E+00
0.420000E+15 0.155318E+00 -0.202554E-44 0.155318E+00
0.421000E+15 0.155285E+00 -0.203691E-44 0.155285E+00
0.422000E+15 0.155318E+00 -0.204831E-44 0.155318E+00
0.423000E+15 0.155414E+00 -0.205973E-44 0.155414E+00
0.424000E+15 0.155575E+00 -0.207116E-44 0.155575E+00
0.425000E+15 0.155802E+00 -0.208262E-44 0.155802E+00我只打印了第一列,但是当我用值乘以它时,awk给了我0。我在其他文件中尝试了我的函数,在这些文件中,数据的格式是不同的,而且它工作得很好。我也试着把它和bc结合起来,但没有成功。
有人知道为什么在这种情况下awk给出0吗?
提前谢谢!
#########编辑
我刚刚发现,如果我的数据文件使用逗号而不是点(即0,400000E+15而不是0.400000E+15),那么我的函数工作得很好。因此,在某种程度上,某种东西被配置成将逗号理解为科学符号分隔符,而不是点。这对任何人来说都是个好消息吗?
发布于 2016-01-26 13:55:38
在执行脚本之前设置LC_ALL=C,以获得此问题和其他与区域设置相关的问题最常见的行为。见http://www.gnu.org/software/gawk/manual/gawk.html#Locales。此外,也不要毫无意义地将FS设置为它的默认值,引用您的shell变量(如果您不知道为什么),并修复您设置变量的方式,以使用产生最直观结果的形式(参见http://cfajohnson.com/shell/cus-faq-2.html#Q24):
LC_ALL=C awk -v col="$column" -v mul="$value" '{print $col*mul}' "$file"阅读书有效的奥克编程,第4版,由阿诺德罗宾斯。
https://stackoverflow.com/questions/35013707
复制相似问题