@stanced

Замена с sed/awk только второго вхождения в определенной колонке csv. Как?

Есть такие строки в CSV:

4535;First Name Last Name;9995554443;0;0;9998887744;...
4523;First Name Last Name;Some Comment //with numbers [etc];9995554443;0;0;0;9998887744...

Проблема в том, что их нужно импортировать в базу, но колонка 3 (где большинство записей телефон) иногда, вместо номера, содержит комментарий, который импортируется вместо номера и все съезжает.
По моей логике, это можно реализовать путем поиска второго (и только второго, так как номера есть и в других колонках) вхождения разделителя ; вместе с номером (проверка на кол-во цифр подряд) и добавлением еще одного разделителя для создания пустой колонки.

Например, в финальном исполнении должно получится так:

4535;First Name Last Name;;9995554443;0;0;0;...
4523;First Name Last Name;Some Comment //with numbers [etc];9995554443;0;0;0;...

Это вполне сгодится. Возможно есть и другие способы решения.
Не подскажите как это сделать с sed или awk? Спасибо.
  • Вопрос задан
  • 190 просмотров
Решения вопроса 1
xotkot
@xotkot
хорошо есть и хорошо весьма
awk 'BEGIN{FS=OFS=";"} {if($3 ~ /^[0-9]/) {$3=";"$3};print}'

пример:
a='4535;First Name Last Name;9995554443;0;0;0;9998887744
4523;First Name Last Name;Some Comment //with numbers [etc];9995554443;0;0;0;9998887744'

echo "$a" |awk 'BEGIN{FS=OFS=";"} {if($3 ~ /^[0-9]/) {$3=";"$3};print}' |csview -d';'
┌──────┬──────────────────────┬───────────────────────────────────┬────────────┬───┬───┬───┬─────────────┐
│ 4535 │ First Name Last Name │                                   │ 9995554443 │ 0 │ 0 │ 0 │ 9998887744  │
├──────┼──────────────────────┼───────────────────────────────────┼────────────┼───┼───┼───┼─────────────┤
│ 4523 │ First Name Last Name │ Some Comment //with numbers [etc] │ 9995554443 │ 0 │ 0 │ 0 │ 9998887744  │
└──────┴──────────────────────┴───────────────────────────────────┴────────────┴───┴───┴───┴─────────────┘

здесь используется простенькое условие что если третий($3) столбец начинается на цифру( ^[0-9]) то мы просто добавляем в начале данного столбца точку с запятой (;)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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