Bash
改變數字文件數據格式的有效方法
所以我有一個包含矩陣值的大文件,格式如下:
(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
方法。這應該比使用sub
andgsub
1更快: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