вот фанковая версия в bash
#!/bin/bash
r=""
res=""
while read line; do
if [[ "$line" =~ ^(r[0-9]+f:[^ \t]+)[[:space:]]+\!+.+$ ]]; then
r="${BASH_REMATCH[1]}"
fi
if [[ "$line" =~ ^(\+[0-9]+\..+[0-9])[[:space:]]+\!+.+$ ]]; then
res="${BASH_REMATCH[1]}"
fi
if [[ -n "$r" ]] && [[ -n "$res" ]]; then
echo -e "$r\t\t$res"
r=""
res=""
fi
done < <(grep -E "^r[0-9]+f:|^\+[0-9]+\." /path/to/yourfile)
это добавит 2 "вкладки" между вашими полями, не знаю, нужно ли вам это. И мой grep немного «широкий», вы можете настроить это, если хотите.
результат:
:/tmp$ bash script
r1f:O2+2PD=>2O-PD +7.000000E-02 +0.000000E00 +0.000000E00
r2f:C3H6+2PD=>C3H6-PD +9.800000E-01 +0.000000E00 +0.000000E00
r3f:C3H6+O-PD+PD=>C3H5-PD+OH-PD +2.747319E-01 +0.000000E00 +0.000000E00
r4f:H2+2PD=>2H-PD +4.600000E-02 +0.000000E00 +0.000000E00
r5f:H2O+PD=>H2O-PD +2.492452E-01 +0.000000E00 +0.000000E00
r6f:CO2+PD=>CO2-PD +5.000000E-03 +0.000000E00 +0.000000E00
Что касается +75%, то это немного усложняет задачу, так как bash не может обрабатывать действительные числа. Итак, вот грязное решение с bash и awk.
#!/bin/bash
while read line; do
if [[ "$line" =~ ^(r[0-9]+f:[^ \t]+)[[:space:]]+\!+.+$ ]]; then
r="${BASH_REMATCH[1]}"
fi
if [[ "$line" =~ ^(\+[0-9\.Ee-]+)[[:space:]]+(\+[0-9\.Ee-]+)[[:space:]]+(\+[0-9\.Ee-]+)[[:space:]]+\!+.+$ ]]; then
res1="${BASH_REMATCH[1]}"
res2="${BASH_REMATCH[2]}"
res3="${BASH_REMATCH[3]}"
res1=$(echo $res1 | awk '{ printf "%.6E",$1*1.75 }')
res3=$(echo $res3 | awk '{ printf "%.6E",$1*1.75 }')
fi
if [[ -n "$r" ]] && [[ -n "$res1" ]] && [[ -n "$res2" ]] && [[ -n "$res3" ]]; then
echo -e "$r\t\t+$res1\t\t$res2\t\t+$res3"
r=""
res1=""
res2=""
res3=""
fi
done < <(grep -E "^r[0-9]+f:|^\+[0-9]+\." /path/to/yourfiles)
Как видите, там есть часть awk, которая просто умножает ваше 1-е и 3-е значение на 1,75. Затем вы можете настроить это по своему усмотрению.
результат:
:/tmp$ bash script
r1f:O2+2PD=>2O-PD +1.225000E-01 +0.000000E00 +0.000000E+00
r2f:C3H6+2PD=>C3H6-PD +1.715000E+00 +0.000000E00 +0.000000E+00
r3f:C3H6+O-PD+PD=>C3H5-PD+OH-PD +4.807808E-01 +0.000000E00 +0.000000E+00
r4f:H2+2PD=>2H-PD +8.050000E-02 +0.000000E00 +0.000000E+00
r5f:H2O+PD=>H2O-PD +4.361791E-01 +0.000000E00 +0.000000E+00
r6f:CO2+PD=>CO2-PD +8.750000E-03 +0.000000E00 +0.000000E+00
«Кольцевой буфер» используется для регистрации ранних сообщений, которые выдаются до того, как будет запущен какой-либо демон syslog. Эта концепция заимствована из -операционных систем реального времени.
Структура данных кольцевого буфера представляет собой просто (предварительно -выделенную )область памяти ядра плюс пару указателей. Он доступен для регистрации в момент запуска ядра. Ему точно не нужно выделять ресурсы, он не рассчитывает на то, что что-то уже работает.Если «что-то пойдет не так» при запуске системы (до такой степени, что rsyslogd
не запускается ), dmesg
покажет эти ранние сообщения, которые могут помочь.
При запуске демон системного журнала считывает кольцевой буфер и создает/обрабатывает записи журнала.
Позже, когда система запущена и работает, демон syslog выполняет регулярный буферизованный дисковый ввод-вывод, запись в файлы журнала, синхронизацию после каждой записи (см.man 3 fflush
). Однако если имя файла журнала начинается с «-
», синхронизация остается за схемой буферизации диска.