Я пытаюсь заменить шаблон с помощью сценария SED, но он не работает должным образом
sample_content.txt
288Y2RZDBPX1000000001dhana
JP2F64EI1000000002d
EU9V3IXI1000000003dfg1000000001dfdfds
XATSSSSFOO4dhanaUXIBB7TF71000000004adf
10Q1W4ZEAV18LXNPSPGRTTIDHBN1000000005egw
узоры.txt
1000000001 9000000003
1000000002 2000000001
1000000003 3000000001
1000000004 4000000001
1000000005 5000000001
Ожидаемый результат
288Y2RZDBPX9000000003dhana
JP2F64EI2000000001d
EU9V3IXI3000000001dfg9000000003dfdfds
XATSSSSFOO4dhanaUXIBB7TF74000000001adf
10Q1W4ZEAV18LXNPSPGRTTIDHBN5000000001egw
Я могу обойтись одной заменой SED, например
sed 's/1000000001/1000000003/g' sample_content.txt
Примечание.
- Соответствующий шаблон не находится в фиксированном положении.
- Одна строка может иметь несколько совпадающих значений для замены в sample_content.txt.
- В файлах Sample_content.txt и Patterns.txt > 1 миллиона записей.
Ссылка на прикрепленный файл: https://drive.google.com/open?id=1dVzivKMirEQU3yk9KfPM6iE7tTzVRdt_
Может ли кто-нибудь предложить, как этого добиться, не влияя на производительность?
Обновлено 11 февраля 2018 г.
После анализа реального файла я только что получил подсказку, что в 30 и 31 позиции есть значение grade. Что помогает, где и во всем нам нужно применить замену.
Если класс AB, замените 10-значный номер телефона на 41–50 и 101–110
Если класс BC, замените 10-значный номер телефона на 11-20, 61-70 и 151-160
Если оценка DE, замените 10-значный номер телефона на 1- 10, 71–80, 151–160 и 181–190
Таким образом, я вижу 50 уникальных оценок для 2 миллионов записей образцов.
{ grade=substr($0,110,2)} // identify grade
{
if (grade == "AB") {
print substr($0,41,10) ORS substr($0,101,10)
} else if(RT == "BC"){
print substr($0,11,10) ORS substr($0,61,10) ORS substr($0,151,10)
}
like wise 50 coiditions
}
Могу ли я узнать, целесообразен ли этот подход или какой-либо другой лучший подход?
> 1 Million records
&&without affecting performance
удачи - person mpapec   schedule 10.02.2018xay
и Pattern.txt включаетa b
иb c
, то инструменты выведутxcy
- соответствует ожидаемому результату или он должен бытьxby
? В зависимости от того, что верно, вы должны включить случай, который проверяет это, в ваш пример ввода. - person Ed Morton   schedule 10.02.2018Single line may have multiple matching value to replace in sample_content.txt
, поэтому переход цикла после первого совпадения, хотя и быстрее, не приведет к ожидаемому результату. Я также думаю, что просто делать 1 замену для каждой соответствующей строки вместо замены всех вхождений каждой строки в каждой строке (как это делают оба ваших скрипта с использованием sub() вместо gsub()) неправильно. - person Ed Morton   schedule 11.02.2018