Shell code-循环读取CSV文件并制作另一个

Shell code- Reading a CSV file by loop and making another one

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

我已经开始这样的代码:

    FileName=
    while read line
    do

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

    echo "$line" >> new2.csv

    done < FileName

注意:文件名为.gz。

(1)我收到错误:"syntax error near unexpected token `done'".

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

谢谢

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

FileName=

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

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

更新:

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

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