Кэш LVM не дает повышения производительности

С учетом data.awk ниже:

{
        if (matched) {
                for (i = 1; i <= NF; i++) {
                        $(i) = 30.0 - $(i)
                }
        }
        print
}
/^C/ { matched = 1 }
BEGIN { CONVFMT = "%.20f" }

Вы получаете:

$ awk -f data.awk data.txt
TITLE
1.000000000000000
10.0000000000000000    0.0000000000000000    0.0000000000000000 
0.0000000000000000   10.0000000000000000    0.0000000000000000
0.0000000000000000    0.0000000000000000   10.0000000000000000
U   U
X   X
C
29.79999999999999715783 29.79999999999999715783 29.79999999999999715783
29.70324000000000097543 29.93589999999999662350 29.84485000000000098908
29.89663000000000181444 29.66389000000000208956 29.75500999999999862666

У него, очевидно, есть проблема с точностью для ввода. Поэтому вы можете вызвать команду bc для фактических вычислений (она поддерживает произвольную точность):

{
        if (matched) {
                for (i = 1; i <= NF; i++) {
                        cmd = "echo 30.0 - " $(i) " | bc"
                        cmd | getline $(i)
                        close(cmd)
                }
        }
        print
}
/^C/ { matched = 1 }

Результат:

TITLE
1.000000000000000
10.0000000000000000    0.0000000000000000    0.0000000000000000 
0.0000000000000000   10.0000000000000000    0.0000000000000000
0.0000000000000000    0.0000000000000000   10.0000000000000000
U   U
X   X
C
29.7999999999999972 29.7999999999999972 29.7999999999999972
29.7032400000000010 29.9358999999999966 29.8448500000000010
29.8966300000000018 29.6638900000000021 29.755009999999999

Чтобы перезаписать data.txt с результатом , вам обычно нужно записать его в другой файл, а затем переименуйте его в исходный файл.

$ awk -f data.awk data.txt > data.txt.out
$ mv data.txt.out data.txt

Или используйте sponge в moreutils.

$ sudo apt-get install moreutils
$ awk -f data.awk data.txt | sponge data.txt
131
задан 28 March 2018 в 18:09

0 ответов

Другие вопросы по тегам:

Похожие вопросы: