Выберите конкретное ключевое слово соответствия из одного столбца и вставьте его в последний столбец — Linux

Не запускайте удаленно то, что можно было бы запустить локально.

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 }' )
0
25.05.2020, 18:52
3 ответа
$ 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

вместо этого удалять конечные пробелы.

3
18.03.2021, 23:33

Вы можете использовать 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 цифр в другом месте поля.

4
18.03.2021, 23:33
$ 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})_/

(мы можем захотеть настроить регулярное выражение для дополнительных ограничений)

1
18.03.2021, 23:33

Теги

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