Bash

改變數字文件數據格式的有效方法

  • February 26, 2016

所以我有一個包含矩陣值的大文件,格式如下:

(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 行)我怎樣才能更快地做到這一點?

這是一種略有不同的awk方法。這應該比使用suband gsub1更快:

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

1我在一個包含 5000000 行的文件上對其進行了測試,它比 gsub/sub 方法快了約 2 秒。差別不大,但對於大文件可能很重要。

如果你awk自己做它會更快:

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

引用自:https://unix.stackexchange.com/questions/265970