2015-01-26 39 views
0

目录中的csv文件列表需要验证。每列应通过自己的验证;因此$ 1是第一个coulmn,它不应该为空等等......shell/linux脚本只能选择某些文件到FTP

在csv文件为每列传递每个验证之后,它被认为是一个好文件。现在我该如何去提取这些好文件,以便我可以将它们ftp到另一个位置?

  1. 我应该在每次验证后对每个文件进行ftp吗? (太多时间了?)

  2. 创建好文件的名称列表并将其传递到数组中,以便稍后将其传递给数组以便将其传递给ftp?

这是我迄今的尝试。

#!/bin/sh 

for file in /source/*.csv 

do 
    awk -F',' '{ 
$date_regex = '~(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d~'; 

if (length($1) == "") 
break 
if (length($2) == "") && (length($2) > 30) 
break 
if (length($3) == "") && ($3 !~ /$date_regex/) 
break 
if (length($4) == "") && (($4 != "S") || ($4 != "E") 
break 
if (length($5) == "") && ((length($5) < 9 || (length($5) > 11))) 
break 

}' file 

    #whatever you need with "$file" 
done 
+0

我想无论哪种方式1或2是好的。你不知道如何实现它,或者你想知道哪种方式更好? – qqibrow 2015-01-26 18:07:59

+0

我不知道如何实现它,我是新的shell脚本,任何洞察力将不胜感激 – purplehaze 2015-01-26 18:10:48

+0

验证脚本不工作,工作awk代码,无论是。也许可以先决定是否需要该部分的帮助,或者是否需要FTP部分的帮助,在这种情况下,可以使用更简单但工作的占位符脚本替换Awk脚本。 – tripleee 2015-01-26 18:20:38

回答

0

如果检查失败,则从awk退出1。 awk成功时使用if语句传输文件。

#!/bin/sh 

    for file in /source/*.csv; do 
     if awk -F',' '{ 
    # your multiple checks here. 
    if (length($1) == "") && (length($2) == "") && (length($2) > 30) && ...) 
      exit 1 
    }' "$file"; then [scp or ftp command as you like]; fi  
    done 
+0

我将如何参考只是在迭代中的文件。说第一个文件是好文件,现在我想用它来通过ftp来指定/引用它 – purplehaze 2015-01-27 16:09:56

+0

“$ file”是变量表示文件名。尝试'/source/*.csv中的文件;做回声“$文件”;完成“,你会得到它。 – qqibrow 2015-01-27 17:13:09