измените числовой формат

У меня есть много строк как ниже:

123; XXXXXXXXXXXXXXX; ABCDE; YYYYYYYY; 08082010; 000000000000000; 08.03.10; 110000; ZZZZZZZZZZZZZZZZZ; 0002

Я просто хочу изменить числовой формат (15 цифр) XXXXXXXXXXXXXXX к XXXXXXXXX; XXX; XXX

и

YYYYYYYYY (9 цифр) к YYYYYY; YYY

с sed.

любой другой формат просто оставляет значение по умолчанию

2
задан 10.08.2010, 07:15

2 ответа

При предположении, что "X" и "Y" представляют цифры и что строка в качестве примера на самом деле имеет 9 "Y" цифр (это имеет восемь в вопросе, но разделение Вы хотите шоу 9), это должно работать:

sed 's/;\([0-9]\{6\}\)\([0-9]\{3\}\);/;\1;\2;/;s/;\([0-9]\{9\}\)\([0-9]\{3\}\)\([0-9]\{3\}\);/;\1;\2;\3;/'

Вы могли использовать переменные для создания его, возможно, немного более читаемым:

dig3="[0-9]\{3\}"
dig6="[0-9]\{6\}"
dig9="[0-9]\{9\}"
sed "s/;\($dig6\)\($dig3\);/;\1;\2;/;s/;\($dig9\)\($dig3\)\($dig3\);/;\1;\2;\3;/"
1
ответ дан 11.12.2019, 22:36

когда у Вас есть структурированные данные и разделители полей, его более легкое для использования awk. В Ваших данных Вы имеете""; как разделители, так используйте его.

awk -F";" '
{
  $2=substr($2,0,9)";"substr($2,9,3)";"substr($2,12,3)
  $4=substr($4,0,6)";"substr($4,7)
}{print}
' OFS=";" file

awk заявление говорит об использовании""; как разделители, затем работайте над полем 2 и 4 (2$, 4$) для Вашего желаемого вывода. Для изменения формата используйте подстроковое представление. Наконец задержите выходного разделителя полей к"";.

это более ясно, чем использование долго нарушенного regex с sed.

1
ответ дан 11.12.2019, 22:36

Теги

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