改变数字文件数据格式的有效方法

改变数字文件数据格式的有效方法

所以我有一个大文件,其中包含具有以下格式的矩阵值:

(0,0) 0.6666
(0,1) 0.0000
(0,2) 1.3333
...

我想将其转换为:

0 0 0.6666e+00
0 1 0.0000e+00
0 2 1.3333e+00
...

我可以使用以下脚本来做到这一点:

#!/bin/bash

input="$1"
while read coord val; do
   printf "%s" "${coord//,/ }" | awk -F '[()]' '{printf "%s",$(NF-1)}'  
   printf " %8.3e\n" "$val"
done < "$input"

但这对于我的情况来说非常慢(9409行)我怎样才能更快地做到这一点?

答案1

这是一种稍微不同的awk方法。这应该比使用suband gsub1更快:

awk -F'[(,)]' '{printf "%s %s %8.3e\n",$2,$3,$4}' file

1我在一个有 5000000 行的文件上测试了它,它比 gsub/sub 方法快了约 2 秒。差别不大,但对于大文件可能很重要。

答案2

如果你单独做的话会更快awk

awk '
{
  gsub("[()]", "", $1)
  sub(",", " ", $1)
  $2 = sprintf("%8.3e", $2)
  print
}' <file

相关内容