команда dd для получения данных определенного диапазона

Вот решение awk:

sed 's/=/ /' <(awk -F"[,)(}{]" '{
                  for (i=4;i<NF;i+=2){printf"%s %s\n",$2,$i|"sort -nk2,3"}}
              ' infile.txt)

Выдача вывода:

0 33 9000.0
0 34 9000.0
0 35 9000.0
0 36 9000.0

, если ваши входные данные приведены ниже (, как это реализовано в ответе @Fedor):

(0,1,{35=9000.0, 36=9000.0, 33=9000.0, 34=9000.0})

Тогда команда будет:

sed 's/=/ /' <(awk -F"[,)(}{]" '{
                  for (i=5;i<NF;i+=2) {printf "%s %s %s\n",$2, $3,$i|"sort -nk2,3"}}
              ' infile.txt)

И вывод:

0 1 33 9000.0
0 1 34 9000.0
0 1 35 9000.0
0 1 36 9000.0
2
25.09.2019, 17:42
1 ответ

Используйте count, чтобы указать количество копируемых байтов. Используйте оболочку для расчета. Используйте ibs=1, чтобы установить размер входного блока равным 1,поэтому skipи countуказываются в байтах.

 dd ibs=1 skip=1228 count=$((1331-1228+1))

Поскольку 1228 и 1331 -1228+1 оба кратны 4, можно было бы установить размер входного блока равным 4, что сделало бы работу более эффективной, но если это не будет использоваться огромное количество раз. оптимизация потеряется в шуме. Другие вещи, такие как предварительное -вычисление результата 1331-1228+1, должны быть выполнены в первую очередь.

 dd ibs=4 skip=$((1228/4)) count=$(((1331-1228+1)/4))
6
27.01.2020, 21:53

Теги

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