Вот решение 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
Используйте 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))