Как использовать case-выражения в BASH?

Описание:

У меня есть код, который извлекает метки времени путем сопоставления ключевого слова / предложения файла .log, который существует в нескольких папках вида log_Job_*.

Он рассчитывает длительность различных процессов и записывает выходные данные в файл .CSV.

Какие столбцы я хочу иметь в моем .csv:

  1. FileName
  2. ProcessType
    • Импорт
    • Проверить
    • ]
  3. . .
  4. MainPartionDuration

Теперь проблема в том, что у меня есть 2 типа процессов в разделе 2. Тип процесса. Итак, подумал об использовании здесь падежных операторов. И сделал следующее:

#!/bin/bash

cd /path/to/manoj/version_2019_logs/

for file in log_Job_*/manoj.log; do

    ProcessType1="$(grep -F 'Running process mpeXbrlImport.xml' "$file" | awk '{print $5}' | cut -c 4-)"
    ProcessType2="$(grep -F 'Running process mpeXbrlValidate.xml' "$file" | awk '{print $5}' | cut -c 4-)"
    ProcessType="$ProcessType1","$ProcessType2"

    case $ProcessType in 
        $ProcessType1)
            #set of commands to get other variaqbles
            Var="$Filename","$ProcessType","$TotalDuration","$Initialization","$MPEProcessDuration","$TotalPartitionDuration","$WaitPartitionDuration","$MainPartionDuration"
            echo $Var >>OutputFile_Import.csv
            ;;
        *)
            #repeat the set of commands and this time save with different variable names 
            Var1="$Filename1","$ProcessType1","$TotalDuration1","$Initialization1","$MPEProcessDuration1","$TotalPartitionDuration1","$WaitPartitionDuration1","$MainPartionDuration1"
            echo $Var1 >>OutputFile_Validate.csv
            ;;
    esac
done

С этим я планирую создать два отдельных файла .CSV на основе Processtype, а затем объединить оба файла.

Проблема: Сценарий успешно выполняется, но в конце он генерирует только один файл, т.е. OutputFile_Validate.csv

Я тщательно проверил сценарий Я не использую какие-либо переменные повторно. Может кто-нибудь сказать мне, что может быть причиной этого !!

1
задан 7 August 2019 в 11:46

1 ответ

Если я понимаю хорошо Вашу проблему, Вы хотите подать import.csv когда ProcessType1 не пусто и validate.csv когда ProcessType2 не.

Вы можете test если переменная установлена и не пустая с:

if [ -n "$VAR" ];
then
    echo "VAR is set\n"
fi

Ваш код мог быть похожим:

#!/bin/bash

cd /path/to/manoj/version_2019_logs/

for file in log_Job_*/manoj.log; do

    ProcessType1="$(grep -F 'Running process mpeXbrlImport.xml' "$file" | awk '{print $5}' | cut -c 4-)"
    ProcessType2="$(grep -F 'Running process mpeXbrlValidate.xml' "$file" | awk '{print $5}' | cut -c 4-)"

    if [ -n "$ProcessType1" ];
    then
        #set of commands to get other variaqbles
        Var="$Filename","$ProcessType1","$TotalDuration","$Initialization","$MPEProcessDuration","$TotalPartitionDuration","$WaitPartitionDuration","$MainPartionDuration"
        echo $Var >>OutputFile_Import.csv
    fi
    if [ -n "$ProcessType2" ];
    then
            #repeat the set of commands and this time save with different variable names 
            Var1="$Filename1","$ProcessType2","$TotalDuration1","$Initialization1","$MPEProcessDuration1","$TotalPartitionDuration1","$WaitPartitionDuration1","$MainPartionDuration1"
            echo $Var1 >>OutputFile_Validate.csv
    fi
done
0
ответ дан 7 December 2019 в 19:13

Другие вопросы по тегам:

Похожие вопросы: