Следующий скрипт bash делает что-то, что может быть связано с тем, что вы хотите. Это параметризовано тем, что вы имели в виду, когда сказали <TAB>
. Я предполагаю, что вы имеете в виду символ табуляции ascii, но если ваши журналы настолько многословны, что в них прописано <TAB>
, вам нужно соответственно изменить переменную $WHAT_DID_YOU_MEAN_BY_TAB
. Обратите внимание, что в этом скрипте очень мало того, что делает The Right Thing ™; он читает весь файл в строковую переменную, что может быть невозможно даже в зависимости от размера ваших файлов журнала. С другой стороны, сценарий можно легко изменить, сделав два прохода, если вы считаете, что это лучше.
#!/bin/bash
WHAT_DID_YOU_MEAN_BY_TAB='\t'
if [[ $# -ne 1 ]] ; then echo "Requires one argument: the file to process" ; exit 1 ; fi
FILENAME="$1"
RELEVANT=$(sed -n '/^==*$/,/^==*$/p' "$FILENAME" | sed '1d' | head -n '-1')
CDR_PKEY=$(echo "$RELEVANT" | \
grep '$insert_vars\['"'cdr_pkey'\]" | \
sed 's/.*=\(.*\)/\1/')
echo "$RELEVANT" | sed '1,2d' | \
sed "s/.*/${CDR_PKEY}$WHAT_DID_YOU_MEAN_BY_TAB\0/"
Следующая команда find
является примером использования, но ваш случай будет зависеть от того, как организованы ваши журналы.
find . LOG_PATTERN -exec THIS_SCRIPT '{}' \;
Наконец, я проигнорировал проблему размещения заголовков CSV на выходе. Это легко сделать внеполосным.
(Изменить: обновлен скрипт, чтобы отразить обсуждение в комментариях.)