通过awk条件按条件检查CSV

时间:2016-07-17 08:10:52

标签: linux shell awk

我有两个条件,在新的CSV文件中有两个不同的结果。

我使用awk读取所有csv文件并检查第一个条件是否有效给我们结果并将该行复制到新CSV。 我使用的另一个条件有不同的结果。 具有第二个条件的行也将被复制到同一个CSV。

我的代码:

     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"}'



     zcat "$FileName" | awk -F'\t' '(($4 >=300) && ($4 <=399)) {Str="Redirect:  " $3;print Str > "New.csv"}'

结果是我的新csv只有第二个条件的行。

由于

2 个答案:

答案 0 :(得分:1)

您使用的是>而不是>>,但为什么要在awk中而不是在shell中进行输出重定向?另外,为什么要使用字符串连接的结果填充变量,这很慢,而不是只打印值?你也可以缩略你的正则表达式。只是做:

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

zcat "$FileName" | awk -F'\t' -v OFS=':  ' '($4 >=300) && ($4 <=399) {print "Redirect", $3}' >> New.csv

答案 1 :(得分:0)

使用>>将内容附加到文件

如果文件已存在,

>重定向将覆盖

所以,第二个命令是:

zcat "$FileName" | awk -F'\t' '(($4 >=300) && ($4 <=399)) {Str="Redirect:  " $3;print Str >> "New.csv"}'

进一步阅读:Redirecting Output of print and printf