Я довольно новичок в создании сценариев bash, и я пытаюсь сделать массовое обновление данных из больших CSV-файлов.Условная подстановка строк в сценарии bash
Структура файла:
date|id|id|000000|string_type|0|0|0.00|0|0|0|0|0|0|string_subtype.
Что изменилось, так это string_subtype и иногда string_type.
Когда я только изменить значение string_subtype с:
sed -i 's/string_subtype_old/string_subtype_new/g' $file
нет никаких проблем.
Проблема при изменении string_type и sub_type в то же время для отдельных строк, то sub_type изменяется для всех записей с тем же string_type
Пример
из
date|id|id|000000|typeA|0|0|0.00|0|0|0|0|0|0|subtypeA
date|id|id|000000|typeA|0|0|0.00|0|0|0|0|0|0|subtypeA
date|id|id|000000|typeA|0|0|0.00|0|0|0|0|0|0|subtypeB
date|id|id|000000|typeA|0|0|0.00|0|0|0|0|0|0|subtypeB
date|id|id|000000|typeA|0|0|0.00|0|0|0|0|0|0|subtypeC
date|id|id|000000|typeA|0|0|0.00|0|0|0|0|0|0|subtypeC
к
date|id|id|000000|typeA|0|0|0.00|0|0|0|0|0|0|subtypeD
date|id|id|000000|typeA|0|0|0.00|0|0|0|0|0|0|subtypeD
date|id|id|000000|typeA|0|0|0.00|0|0|0|0|0|0|subtypeE
date|id|id|000000|typeA|0|0|0.00|0|0|0|0|0|0|subtypeE
date|id|id|000000|typeB|0|0|0.00|0|0|0|0|0|0|subtypeF
date|id|id|000000|typeB|0|0|0.00|0|0|0|0|0|0|subtypeF
Я пробовал с
sed -e 's/string_type_old/string_type_new/g' -e 's/string_subtype_old/string_subtype_new/g' $file
, но все string_type_old изменены!
Любые предложения?
--edit--
реальный пример:
от
2014-01-01|000fc55|297633835|122350|WHOME|0|0|0.00|2|0|0|0|0|0|WHOME_CLEAN
2014-01-01|000fc56|297633835|122377|WHOME|0|0|0.00|2|0|0|0|0|0|WHOME_STORA
2014-01-01|000fc57|297633835|122378|WHOME|0|0|0.00|2|0|0|0|0|0|WHOME_OTHER
2014-01-01|000fc58|297633835|122428|WHOME|0|0|0.00|2|0|0|0|0|0|WHOME_KGADG
2014-01-01|000fc59|297633835|120776|WHOME|1|0|0.00|0|0|0|0|0|0|WFOOD_GOURT
к
2014-01-01|000fc55|297633835|122350|WHOME|0|0|0.00|2|0|0|0|0|0|W_CLEAN
2014-01-01|000fc56|297633835|122377|WHOME|0|0|0.00|2|0|0|0|0|0|W_STORA
2014-01-01|000fc57|297633835|122378|WHOME|0|0|0.00|2|0|0|0|0|0|W_OTHER
2014-01-01|000fc58|297633835|122428|WGADG|0|0|0.00|2|0|0|0|0|0|W_KGADG
2014-01-01|000fc59|297633835|120776|WFOOD|1|0|0.00|0|0|0|0|0|0|W_GOURT
Raws 1 до 3 просто с
SED -i «s/WHOME_CLEAN/W_CL EAN/г»$ файла
СЕПГ -i 's/WHOME_STORA/W_STORA/г' $ файла
СЕПГ -i 's/WHOME_OTHER/W_OTHER/г' $ файла
В баранами 4 и 5 Мне нужно изменить главный тип WHOME в WGADG или WFOOD.
с
СЕПГ -e 's/WHOME/WGADG/г' -e 's/WHOME_KGADG/W_KGADG/г' $ файла
все баранами с WHOME меняются!Мне нужно какая-то команда, фильтр, так как Grep, только бараны с типом == WHOME & & подтип == WGADG
Может ли вы дать фактический образец ввода и команды sed, которые вы использовали, что показывает проблему? –
Ваша команда 'sed' показывает' string_type_old' и 'string_subtype_old', которые не находятся в ваших файлах ввода/вывода. – anubhava