sed или awk: поиск между двумя образцами и, изменение слова на втором месте

El valor de Ghz en perf stat -ano muestra los ciclos por segundo. 4.719.000 ciclos divididos por 0,0016 segundos es 2,9 Ghz, no 0,76 Ghz.

Supongo que lo que muestra perfes un promedio de los ciclos por segundo en cada núcleo de CPU . Dividiendo 2.9Ghz por 0.76Ghz da 3.8. Esto no es un número entero de CPU, pero es correcto. Me doy cuenta de que coincide exactamente con la extraña figura anterior de "CPU utilizadas".


Comparar perf statsin-a:

# time perf stat -r 500  mount --make-rprivate /mnt/a

 Performance counter stats for 'mount --make-rprivate /mnt/a' (500 runs):
      1.323450      task-clock (msec)         #    0.812 CPUs utilized            ( +-  0.84% )
             0      context-switches          #    0.008 K/sec                    ( +- 44.54% )
             0      cpu-migrations            #    0.000 K/sec                  
           122      page-faults               #    0.092 M/sec                    ( +-  0.04% )
     2,668,696      cycles                    #    2.016 GHz                      ( +-  0.28% )
     3,090,908      instructions              #    1.16  insn per cycle           ( +-  0.04% )
       611,827      branches                  #  462.297 M/sec                    ( +-  0.03% )
        20,252      branch-misses             #    3.31% of all branches          ( +-  0.09% )

   0.001630517 seconds time elapsed                                          ( +-  0.82% )


real    0m1.089s
user    0m0.378s
sys 0m0.715s

Tenga en cuenta también que los ciclos informados por perf stat -ano representan exactamente un cálculo productivo. perf record -aseguido de perf reportmostró el punto de acceso superior de la siguiente manera:

# perf record -a sh -c "for i in {1..500}; do mount --make-rprivate /mnt/a; done"
...
# perf report
...
  19.40%  swapper          [kernel.kallsyms]           [k] intel_idle
...

Es decir, aunque la frecuencia de la CPU se está reduciendo en los núcleos inactivos, los ciclos contados por perf también parecen incluir un gran número "gastado" mientras el núcleo detuvo la CPU y entró en una CPU inactiva Expresar.

(O al menos el núcleo estaba tratando de poner la CPU en un estado inactivo de bajo -consumo de energía. No sé si perfinterrumpe la CPU con la suficiente frecuencia como para interferir completamente con el ralentí ).

-6
29.12.2016, 10:29
3 ответа
sed 's/Red2/REDRED22/'

Пример:

sed 's/Red2/REDRED22/' redred 
White
Black
Green1
Red1
Yellow1
Blue
----
White
Black
Green2
REDRED22
Yellow2
Blue
----
White
Black
Green3
Red3
Yellow3
Blue

Исходный файл выглядит следующим образом:

cat redred 
White
Black
Green1
Red1
Yellow1
Blue
----
White
Black
Green2
Red2
Yellow2
Blue
----
White
Black
Green3
Red3
Yellow3
Blue
0
28.01.2020, 05:21

Обобщенный поиск, совместимый с Perl, должен быть таким:

(?<=Green2\n).*(?=(\n.*)+Yellow2)

Я понимаю, что шаблоны «до» и «после» - это Green2 и Yellow2, и следует выбрать всю строку после Green2. Этот шаблон работает, даже если перед Yellow2 есть больше линий. Однако из-за требований к экранированию в sed это очень сложно реализовать там.

В Perl это будет выглядеть так:

perl -0777 -pe 's/(?<=Green2\n).*(?=(\n.*)+Yellow2)/REDRED22/g' /path/to/file
0
28.01.2020, 05:21

Очень поздно, я знаю, но я не мог устоять перед задачей заставить это работать с sed.

С текстом, помещенным в файл с именем redred:

sed -E ':a;N;$!ba;s/(Green2\n)([a-zA-Z]*)([0-9]*)(\nYellow2)/\1\2\2\3\3\4/g' redred

Использует ЭТУ технику для чтения \n в sed и позиционных маркеров для разбиения и перестроения цели.

Это также разделяет любую цель, состоящую из текста и числа (, например. Aubergine123 )в компоненты [[ :alpha :]] и [[ :digit :]], а затем перестраивает целевую строку так, как этого хотел OP (AubergineAubergine123123 ).

0
28.01.2020, 05:21

Теги

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