разделить один и конкретный столбец на несколько столбцов через каждые 2 значения

Вы можете попробовать проверить, зарегистрированы ли ваши устройства (с )под /dev/serial/by -id/

ls -l /dev/serial/by-id

Эти имена должны быть согласованы и указывать (символическую ссылку )на правильный ttyUSBx

0
19.07.2020, 00:06
2 ответа
awk 'BEGIN{FS=OFS=","}{gsub(/../,"&,",$NF)}1' file
  • BEGIN{FS=OFS=","}устанавливает разделители полей в ,.
  • {gsub(/../,"&,",$NF)}добавляет ,к каждым 2 символам в последнем поле($NF).
  • 1печатает результирующую строку.

Результат:

MA,30009,4,4,00,00,10,00,01,11,10,10,11,11,10,00,11,01,00,00,00,00,

Если вы хотите удалить завершающую запятую, созданную приведенной выше командой, удалите ее с помощью дополнительной функции sub:

awk 'BEGIN{FS=OFS=","}{gsub(/../,"&,",$NF);sub(/,$/,"",$NF)}1' file
MA,30009,4,4,00,00,10,00,01,11,10,10,11,11,10,00,11,01,00,00,00,00
1
18.03.2021, 23:18

Вы можете использовать Sed с циклом:

$ sed -E -e :a -e 's/(,[^,]{2})([^,]{1,})$/\1,\2/;ta' file
MA,30009,4,4,00,00,10,00,01,11,10,10,11,11,10,00,11,01,00,00,00,00
ME,30067,3,2,00,00,10,00,01,11,10,10,11,11,10,00,11,01,00,00,00,00
MI,30032,7,8,00,00,10,00,01,11,10,10,11,11,10,00,11,01,00,00,00,00

(У меня есть ощущение, что есть более аккуратный способ сделать это, начиная с $и работая в обратном направлении -, но я не могу понять, как это ). Режим-E(расширенного регулярного выражения )не является обязательным -, он просто упрощает экранирование.

Альтернативно с Perl:

$ perl -F, -lne '$last = pop @F; print join ",", @F, $last =~ m/(..)/g' file
MA,30009,4,4,00,00,10,00,01,11,10,10,11,11,10,00,11,01,00,00,00,00
ME,30067,3,2,00,00,10,00,01,11,10,10,11,11,10,00,11,01,00,00,00,00
MI,30032,7,8,00,00,10,00,01,11,10,10,11,11,10,00,11,01,00,00,00,00
1
18.03.2021, 23:18

Теги

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