Не запускайте удаленно то, что можно было бы запустить локально.
var=$( ssh master lsblk | awk '/^sdb/ { print $4 }' )
Для случаев, когда значение sdb
находится в переменной (из комментариев ниже):
var=$( ssh master lsblk | awk -v disk="$variable" '$0 ~ disk { print $4 }' )
или, для принудительного совпадения в начале строки,
var=$( ssh master lsblk | awk -v disk="$variable" '$0 ~ "^" disk { print $4 }' )
$ sed -E 's/_([0-9]{5})_(.*)$/_\1_\2,\1/' file
2020-05-19_19:03:07,210,HR051919040_to_17622_is_ok.,17622
2020-05-19_19:03:07,200,MP051919032700_to_Average_95840_is_ok.,95840
2020-05-19_19:03:07,200,
2020-05-19_19:03:07,200,RJ0515_to_System__to_66638_is_nok.,66638
_([0-9]{5})_
соответствует пяти цифрам между_
(.*)$
соответствует до конца строки _\1_\2,\1
восстанавливает исходную часть (_\1_\2
), а затем добавляет,\1
Образец данных в вопросе содержал пробелы в конце. Если это также имеет место в ваших живых данных, используйте
sed -E 's/_([0-9]{5})_(.*\.)[[:blank:]]+$/_\1_\2,\1/' file
вместо этого удалять конечные пробелы.
Вы можете использовать awkmatch
-что-то вроде
$ awk -F, 'BEGIN{OFS=FS} match($3,/_[0-9]{5}_/){$(NF+1) = substr($3,RSTART+1,RLENGTH-2)} 1' file.csv
2020-05-19_19:03:07,210,HR051919040_to_17622_is_ok.,17622
2020-05-19_19:03:07,200,MP051919032700_to_Average_95840_is_ok.,95840
2020-05-19_19:03:07,200,
2020-05-19_19:03:07,200,RJ0515_to_System__to_66638_is_nok.,66638
Включение начального и конечного символов подчеркивания в совпадение, а затем их обрезка с помощью substr
гарантирует, что вы не найдете последовательность из 5 цифр в другом месте поля.
$ perl -nle 'print "$_,",/_(\d{5})_/' ex
2020-05-19_19:03:07,210,HR051919040_to_17622_is_ok.,17622
2020-05-19_19:03:07,200,MP051919032700_to_Average_95840_is_ok.,95840
2020-05-19_19:03:07,200,,
2020-05-19_19:03:07,200,RJ0515_to_System__to_66638_is_nok.,66638
Для каждой строки вводаperl -nle
print "$_,"
/_(\d{5})_/
(мы можем захотеть настроить регулярное выражение для дополнительных ограничений)