【问题标题】:gunzip preform task and rezipgunzip 预制任务和重新压缩
【发布时间】:2010-10-14 02:42:35
【问题描述】:

我想这样做

awk -F, '$1 ~ /F$/' file.dat

整个 gzip 文件目录

我希望能够遍历每个文件解压缩它执行上述命令(打印出任何发现)重新压缩并移动到下一个压缩文件

如何做到这一点?

谢谢

【问题讨论】:

    标签: unix awk gunzip


    【解决方案1】:

    一个shell脚本怎么样:

    gunzip $1.gz
    awk -F, '$1 ~ /F$/' $1
    gzip $1
    

    只要确保$1 没有.gz 扩展名即可。

    然后您可以执行以下操作:

    find -name \*.gz -type f|xargs my_shell_script
    

    【讨论】:

      【解决方案2】:

      好吧,如果你必须把它全部放在一行中:

      find . -name \*.gz -print0 | xargs -0 gunzip -c | awk -F, '$1 ~ /F$/'
      

      应该为你工作

      【讨论】:

      • 除了最后不重新压缩。
      【解决方案3】:

      在我看来,您希望输出以逗号分隔的字段列表中的第一个字段以“F”结尾的行

      如果您不关心列出这些行来自哪个 .gz 文件,或 gzip 压缩文件中的哪个文件 - 也就是说,您只希望列出这些行 - 您甚至不必对 .gz 文件进行压缩。 gz 文件,这样你就不必重新压缩它们。

      zcat file.gz | awk -F, '$1 ~ /F$/'
      

      对于当前目录树中的每个文件,使用带有 xargs 的查找。此示例将其限制为仅当前目录,但只需省略“-maxdepth 1”即可获取整个目录树

      find . -maxdepth 1 -name \*.gz -print0 | xargs -0 zcat | awk -F, '$1 ~ /F$/'
      

      这表示要查找以“.gz”结尾的文件并用 NUL 终止符写它们的名称​​(-print0 中的 0),通过 xargs 管道输出,这将根据选择列表分开在 NUL 字符(“-0”参数)上并在文件上运行 zcat。通过您的 awk 命令管道 输出,您将获得写出的相关行。

      【讨论】:

        猜你喜欢
        • 2019-02-24
        • 2012-03-29
        • 1970-01-01
        • 2015-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-29
        • 2017-02-03
        相关资源
        最近更新 更多