fdisk :Тип раздела по умолчанию «Файловая система Linux»

Этот подход создает всю строку вывода только с одним процессом. Следовательно, это должно быть намного быстрее, чем использование серии grep и cut. Кроме того, awk довольно мощный (, он выполняет математические операции с плавающей запятой, например ), что может быть полезно, если вы позже внесете улучшения в вывод.

Попробуйте:

$ awk '/ETA/{mb=$2; speed=$7" "$8} /Errors/{err=$2} /Transferred/{n=$2} /Elapsed/{printf "Transferred %s, %s files with %s errors in %s @ %s\n",mb,n,err,$3,speed}' rclone.log 
Transferred 577.080M, 2 files with 0 errors in 45.5s @ 12.660 MBytes/s,

Как это работает

  • /ETA/{mb=$2; speed=$7" "$8}

    Если текущая строка содержит ETA (, что означает, что это первая строка Transferred, сохраните второе поле в mbи седьмое и восьмое поля в speed.

  • /Errors/{err=$2}

    Если эта строка содержит Errors, то сохраните второе поле в err.

  • /Transferred/{n=$2}

    Если эта строка содержит Transferred, сохраните второе поле в переменной n.

  • /Elapsed/{printf "Transferred %s, %s files with %s errors in %s @ %s\n",mb,n,err,$3,speed}'

    Наконец, когда мы достигнем строки, содержащей Elapsed, распечатайте наше сообщение.

Многострочная версия

Для тех, кто предпочитает, чтобы их код располагался на нескольких строках:

awk '
/ETA/{
    mb=$2
    speed=$7" "$8
}
/Errors/{
    err=$2
}
/Transferred/{
    n=$2
}
/Elapsed/{
    printf "Transferred %s, %s files with %s errors in %s @ %s\n",mb,n,err,$3,speed
}' rclone.log 
0
07.08.2021, 09:08
0 ответов

Теги

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