Size: a a a

2020 December 20

DE

Denis Efremov in pro.bash
Вытащить числа в переменные локальные
источник

ПК

Паша Калугин... in pro.bash
Паша Калугин
Чтобы матчить регуляркой таймстамп, разделять на колонки авком, печатать им же результат, заменять матч на результат авка
.
источник

DE

Denis Efremov in pro.bash
Ну и чего ты ноешь?
источник

ПК

Паша Калугин... in pro.bash
будет что-то вроде
sed "s/([0-9]+:)[0-9]+/<$(awk bla)>"
источник

ПК

Паша Калугин... in pro.bash
Непонятно, как именно нужно сделать переход от sed к awk
источник

DE

Denis Efremov in pro.bash
ну делай поэтапно
источник

ПК

Паша Калугин... in pro.bash
Чтобы в stdin awk подавался матч и заменялось на stdout awk
источник

DE

Denis Efremov in pro.bash
как вывод перенаправить ты не знаешь?
источник

ПК

Паша Калугин... in pro.bash
внутри sed скрипта — нет
источник

DE

Denis Efremov in pro.bash
Не нужно внутри
источник

DE

Denis Efremov in pro.bash
Сделай снаружи
источник

DE

Denis Efremov in pro.bash
IFS=: read hours minutes seconds <<< 01:01:01
источник

ПК

Паша Калугин... in pro.bash
не понял
источник

🌚

🌚 YupiRex in pro.bash
Denis Efremov
prog1 | prog2

does the same like

prog1 > tmp_file && prog2 < tmp_file
prog2 < <( prog1)
источник
2020 December 21

DE

Denis Efremov in pro.bash
#!/bin/bash

str="foo bar 01:01:01 baz\nfoo\n10:00:10"

echo $str | grep -o -P -e "\d{2}:\d{2}:\d{2}" | {
 while read i
 do
   IFS=':' read -r -a hrs <<< "$i"
   result=0
   k=0
   for value in "${hrs[@]}"
   do
     case $k in
       0)
         hrs=$(($value*3600))
         result=$(($result+$hrs))
         ;;
       1)
         min=$(($value*60))
         result=$(($result+$min))
         ;;
       2)
         result=$(($result+$value))
         ;;
     esac
     ((k++))
   done
   echo $result
 done
}
IFS=' '
источник

DE

Denis Efremov in pro.bash
Дальше разберешься сам?
источник

∀lǝxǝʎ in pro.bash
Denis Efremov
#!/bin/bash

str="foo bar 01:01:01 baz\nfoo\n10:00:10"

echo $str | grep -o -P -e "\d{2}:\d{2}:\d{2}" | {
 while read i
 do
   IFS=':' read -r -a hrs <<< "$i"
   result=0
   k=0
   for value in "${hrs[@]}"
   do
     case $k in
       0)
         hrs=$(($value*3600))
         result=$(($result+$hrs))
         ;;
       1)
         min=$(($value*60))
         result=$(($result+$min))
         ;;
       2)
         result=$(($result+$value))
         ;;
     esac
     ((k++))
   done
   echo $result
 done
}
IFS=' '
— использовать $ внутри $(()) плохой тон и есть маленький шанс встрять
-o -P -e вместо bundling'а (-oP), ну ок...
— do на отдельной строке. на любителя, но не возбраняется
— зачем IFS  в конце?
— фигурные скобки вокруг while тоже не нужны, одна ж команда там. а не LIST
— аргументы echo лучше всё ж кавычить
источник

🌚

🌚 YupiRex in pro.bash
жестко
источник

DE

Denis Efremov in pro.bash
Ну я не спец. На коленке собирал
источник

DE

Denis Efremov in pro.bash
Просто хотел показать что лучше не ныть, а шаг за шагом идти к цели
источник