外壳代码-通过循环读取CSV文件并制作另一个文件



我必须执行Shell代码,逐行读取CSV文件,检查某些列中的每一行值,并根据条件创建另一个新的CSV文件。

我已经开始这样的代码:

    FileName=$1
    while read line
    do
    zcat FileName awk -F't' '$3 ~/.jar/ || $3 ~/.msi/ || $3 ~/.dll/ || $3 ~/.cab/ || $3 ~/.exe/ || $3 ~/.rar/ || $3 ~/.mar/ || $3 ~/.tgz/ || $3 ~/.tar/ ||  $3 ~/.gz/ || $3 ~/.upd/ || $3 ~/.bin/ || $3 ~/.zip/ || $3 ~/.pogo/ || $3 ~/.dcr/ || $3 ~/.qgi/ || $3 ~/.deb/ || $3 ~/.ipa/ || $3 ~/symantec/ || $3 ~/windowsupdate/ || $3 ~/kaspersky/ || $3 ~/adobe.com/ && $42 ~/7/ && $15 ~/androiddownloadmanager/ && $15 ~/.apk/ && $15 ~/.pak/ && $15 ~/.vpx/ {Str="SW Download: " $3;Str>> New.csv} '
    echo "$line" >> new2.csv
    done < FileName

注意:文件名为.gz.

(1) 我得到了错误:"意外标记`done'附近的语法错误"。

(2) 我想检查新的csv是否会完成并包含行。

感谢

您不需要shell循环。只需将zcat输出管道传输到awk:

FileName=$1
zcat "$FileName" | awk -F't' '($3 ~/.jar/ || /.msi/ || /.dll/ || /.cab/ || /.exe/ || /.rar/ || /.mar/ || /.tar/ || /.gz/ || /.upd/ || /.bin/ || /.zip/ || /.pogo/ || /.dcr/ || /.qgi/ || /.deb/ || /.ipa/ || /symantec/ || /windowsupdate/ || /kaspersky/ || /adobe.com/) && $42 ~/7/ && ($15 ~/androiddownloadmanager/ && /.apk/ && /.pak/ && /.vpx/) {Str="SW Download: " $3;print Str > "New.csv"}'

使用变量的正确语法是$FileName,而不是FileName

更新:

正如Triplee所指出的,awk命令应该是:

zcat "$FileName" | awk -F't' '($3 ~/.(jar|msi|dll|cab|exe|rar|mar|tar|gz|upd|bin|zip|.pogo|dcr|qgi|deb|ipa)/ || $3 ~/(symantec|windowsupdate|kaspersky|adobe.com)/) && $42 ~/7/ && $15 ~/androiddownloadmanager/ && $15 ~/.apk/ && $15~/.pak/ && $15~/.vpx/ {Str="SW Download: " $3;print Str }'

相关内容

  • 没有找到相关文章

最新更新