2016-07-17 36 views
0

我有兩個條件,在新的CSV文件中有兩個不同的結果。檢查CSV通過awk條件的條件

我用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只與第二狀態就行了。

感謝

+1

又是什麼問題? –

回答

0

使用>>追加內容到文件

>重定向將覆蓋,如果文件已經存在

所以,第二個命令是:

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

進一步閱讀:Redirecting Output of print and printf

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