2016-07-01 3 views
0

Я застрял с проблемой ниже, связанной с командой awk.awk - фатальная ошибка при чтении файла

В соответствии с нижеприведенной функцией Input-command производит 5 файлов csv & сбрасывает их в соответствующий csvFolder. Проблема заключается в том, что функция называется броском ниже ошибки, поскольку awk не получает значение $I.

AWK: со смертельным исходом: .... не читает (Нет такого файла или каталога)

Есть ли способ обойти это условие AWK, если CSV-файлов не существует в csvFolder или csvFolder2?

Function() { 

#CSV prducer command 

Input-command="$command-to-calculate" 

#Parse csv files to get row count which do not have special-word 

for I in csvFolder/*.csv 
Do 
    Var=$(awk 'NR>1' csvFolder/$I | grep -cv 'special-word') 
    Echo $Var 
Done 

#CSV prducer command no. 2 

Input-command-2="$command-to-calculate" 

#Parse csv files to get row count which do not have special-word 

for I in csvFolder2/*.csv 
Do 
    Var=$(awk 'NR>1' csvFolder2/$I | grep -cv 'special-word') 
    Echo $Var 
Done 

} 

ответ

0

С ток контура, т.е.:

for I in csvFolder/*.csv 

I будет иметь значения, как csvFolder/sample.csv. Так что вам не нужно делать

Var=$(awk 'NR>1' csvFolder/$I | grep -cv 'special-word') 

Вместо делать

Var=$(awk 'NR>1' "$I" | grep -cv 'special-word') 

Кроме того, Grep избыточен здесь. Если вы пытаетесь подсчитать строки, которые не содержат «специальный слово`, Вы можете сделать это нравится:

Var=$(awk 'BEGIN{FS=","}!/special-word/{if(NR>1){count++}}END{print count}' "$I") 

примечание стороны:

Корпус чувствителен к регистру, Echo $Var должно было быть echo $Var и так далее.

+0

Со вторым случаем, где мы передаем файл csv? – Rock

+0

Я пробовал этот код в автономном режиме, но $ var получал строку вместо счета на самом деле – Rock

+0

Работал над кодом. И я хочу также исключить заголовок. Знаете только NR> 1? – Rock

Смежные вопросы