0

CSVファイルを1行ずつ読み取り、いくつかの列の値のすべての行をチェックし、条件に従って別の新しい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 が作成され、行が含まれているかどうかを確認したい。

ありがとう

4

1 に答える 1

0

シェルループは必要ありません。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

アップデート:

tripleee が指摘したように、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 }'
于 2016-07-17T06:30:37.027 に答える