linux - 按条件按条件检查 CSV

标签 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 只包含符合第二个条件的行。

谢谢

最佳答案

您使用的是 > 而不是 >> 但为什么要从 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

关于linux - 按条件按条件检查 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38419175/

相关文章:

c++ - LD_PRELOAD 导致 linux 命令的段错误

shell - 在 shell 中不逐行比较 2 个文件

linux - 关于 grep 命令

bash - 如何使用 `awk` 来 grep 像这样的某些列?

c - 从设备到主机的用户模式 ​​USB 同步传输

linux - 添加 Linux 驱动属性文件失败

linux - 提取 Docker.io 镜像的根文件系统并在 chroot 中使用它是否安全?

shell - 批处理文件 - 命令行参数的数量

linux - 如何在 Red Hat Linux Server 中查找 RAM 大小?

python - 将两行 csv 合并为一行