Используйте приведенный ниже код, но это занимает больше времени для чтения.Как добавить имя и значения каждого набора записей в несколько записей
while read TAG
do
TAGNAME=$(echo $TAG | cut -d '>' -f1)
TAGVALUE=$(echo $TAG | cut -d '>' -f2)
if [ "$TAGNAME" = "START_OF_REC" ]
then
CNT_VAR=`expr $CNT_VAR + 1`
DERIVED_ID=${DATE_VAR}${CNT_VAR}
CUST_ID_VAR="NULL_CUST_ID"
OPPOR_ID_VAR="NULL_OPPOR_ID"
elif [ "$TAGNAME" = "bd-cust-id" ]
then
CUST_ID_VAR=$TAGVALUE
sed -i 's/NULL_CUST_ID/'$CUST_ID_VAR'/g' $FLAT_FILE
echo ${CUST_ID_VAR}${PIPE}${OPPOR_ID_VAR}${PIPE}${DERIVED_ID}${PIPE}${TAGNAME}${PIPE}${TAGVALUE} >> $FLAT_FILE
elif [ "$TAGNAME" = "mars-opportunity-id" ]
then
OPPOR_ID_VAR=$TAGVALUE
if [ "$OPPOR_ID_VAR" = "EMPTY_VAL" ]
then
sed -i 's/NULL_OPPOR_ID//g' $FLAT_FILE
else
sed -i 's/NULL_OPPOR_ID/'$OPPOR_ID_VAR'/g' $FLAT_FILE
echo ${CUST_ID_VAR}${PIPE}${OPPOR_ID_VAR}${PIPE}${DERIVED_ID}${PIPE}${TAGNAME}${PIPE}${TAGVALUE} >> $FLAT_FILE
fi
else
if [ "$OPPOR_ID_VAR" = "EMPTY_VAL" ]
then
echo ${CUST_ID_VAR}${PIPE}${PIPE}${DERIVED_ID}${PIPE}${TAGNAME}${PIPE}${TAGVALUE} >> $FLAT_FILE
else
echo ${CUST_ID_VAR}${PIPE}${OPPOR_ID_VAR}${PIPE}${DERIVED_ID}${PIPE}${TAGNAME}${PIPE}${TAGVALUE} >> $FLAT_FILE
fi
fi
done < INPUT_FILE
Я использую приведенный выше код для чтения 50K записей, как указано ниже 2 записей примеров, которые начинаются каждую запись с START_OF_REC.
Я написал сценарий, но его навсегда заработал 50K записей.
Я ищу сценарий bash, который работает быстрее.
input_file
START_OF_REC>START
trigger>SalesLeadCreated
message-sent-at-ts>2015-01-27T00:00.08
bd-cust-id>
mars-opportunity-id>2-BFGCMQ5
mars-activity-id>2-BFGCMPZ
lead-type>AccountOpen
media-ad-code>WWW
lead-action-code>completed
START_OF_REC>START
trigger>SalesLeadCreated
message-sent-at-ts>2015-01-27T00:00.10
bd-cust-id>054671
mars-opportunity-id>2-BFGC39C
mars-activity-id>2-BFGC396
lead-type>AccountOpen
media-ad-code>WWW `enter code here`
lead-action-code>saved
Ожидаемое ВЫВОД
bd-cust-id|mars-opportunity-id|SQL_ID|Tag_name|Tag_Value
|2-BFGCMQ5|1|trigger|SalesLeadCreated
|2-BFGCMQ5|1|message-sent-at-ts|2015-01-27T00:00.08
|2-BFGCMQ5|1|bd-cust-id|
|2-BFGCMQ5|1|mars-opportunity-id|2-BFGCMQ5
|2-BFGCMQ5|1|mars-activity-id|2-BFGCMPZ
|2-BFGCMQ5|1|lead-type|AccountOpen
|2-BFGCMQ5|1|media-ad-code|WWW
|2-BFGCMQ5|1|lead-action-code|completed
054671|2-BFGC39C|2|trigger|SalesLeadCreated
054671|2-BFGC39C|2|message-sent-at-ts|2015-01-27T00:00.10
054671|2-BFGC39C|2|bd-cust-id|054671
054671|2-BFGC39C|2|mars-opportunity-id|2-BFGC39C
054671|2-BFGC39C|2|mars-activity-id|2-BFGC396
054671|2-BFGC39C|2|lead-type|AccountOpen
054671|2-BFGC39C|2|media-ad-code|WWW
054671|2-BFGC39C|2|lead-action-code|completed
Зацикливание ввода по строкам с помощью bash выполняется медленно. Вам также будет лучше, если вы не запустили 'sed' над файлом N раз. Переписывание этого в 'awk' или' perl' или 'python' или' ruby', скорее всего, будет * значительно быстрее. –