2015-02-09 2 views
0

У меня есть этот скрипт, который будет читаться в файлах csv, которые будут в каталоге. Однако я хочу, чтобы скрипт для проверки весь coulmn файла .csv перед переходом ко второму столбцу т.е.Сценарий оболочки для проверки столбца

Name, City 
Joe, Orlando 
Sam, Copper Town 
Mike, Atlanta 

Поэтому он должен проверить coulmn ИМЕНА первым, прежде чем он moveds на проверить город? Как я могу внести изменения в следующий сценарий, чтобы удовлетворить это?

 # Read all files. no file have spaces in their names 
    for file in /source/*.csv ; do 
     # init two variables before processing a new file 
    FILESTATUS=GOOD 
    FIRSTROW=true 
     # process file 1 line a time, splitting the line by the 
     # Internal Field Sep , 
    cat "${file}" | while IFS=, read field1 field2; do 
     # Skip first line, the header row 
    if [ "${FIRSTROW}" = "true" ]; then 
    FIRSTROW=FALSE 
     # skip processing of this line, continue with next record 
    continue; 
    fi 

     #different validations 
    if [[ "${field1}" = somestringprefix* ]]; then 
    ${FILESTATUS}=BAD 
    # Stop inner loop 
    break 
    fi 
    somecheckonField2 
    done 
    if [ ${FILESTATUS} = "GOOD" ] ; then 
     mv ${file} /source/good 
    else 
     mv ${file} /source/bad 
    fi 
done 

ответ

0

Я хотел бы использовать awk во внутреннем цикле:

if awk -F, '$1 !~/^prefix1/ || $2 !~ /^prefix2/ {exit(1)}' "$file" ; then 
    mv "$file" good 
else 
    mv "$file" bad 
fi 

^prefix1 и ^prefix2 предназначены для регулярных выражений модели.

+0

Спасибо, но выше скрипта, он выполняет итерацию по вертикали, проверяя каждое поле в столбце, а не горизонтальное, что является традиционной оценкой. –

+0

Он проверяет строку за строкой. Но если строка недействительна, она останавливает дальнейшую обработку в этом файле и возвращает '1' – hek2mgl