Вероятно, это целесообразно сделать в следующем порядке. Сначала вы анализируете конфигурацию (предполагая, что GNU диалект awk):
gawk -F \| -v OFS=\| 'NR == FNR { # this pattern trigs inside the first file
split($0, mapping, /:/)
rules[mapping[1]] = mapping[2]
next # short-circuit to skip other blocks
}
Далее в первой строке файла данных необходимо проанализировать заголовки столбцов:
FNR == 1 {
for(i = 1; i <= NF; ++i) if($i in rules) forcedValues[i] = rules[$i]
print
next
}
Теперь у вас есть массив forcedValues
, который для некоторых номеров столбцов от 1 до 7 (в вашем примере) содержит значения, в которые эти столбцы должны быть сброшены. Итак, теперь вы обрабатываете остальную часть файла:
{
for(i in forcedValues) $i = forcedValues[i]
print
}' config.txt input.txt > output.txt
(Три фрагмента кода в этом посте на самом деле являются частями одной команды оболочки и должны объединяться через переводы строки.)