【问题标题】:is it possible to print different lines to different output files using awk是否可以使用 awk 将不同的行打印到不同的输出文件
【发布时间】:2012-10-25 21:31:36
【问题描述】:

我想根据不同的条件,使用awk将不同的行打印到不同的输出文件,比如

awk '{if($2>10) print > outfile1; else print > outfile2}' infile

但是这个脚本不起作用 如何修改它? 谢谢!>

【问题讨论】:

    标签: awk


    【解决方案1】:

    您需要将文件名用双引号括起来:

    awk '{if($2>10) {print > "outfile1"} else {print > "outfile2"}}' infile
    

    【讨论】:

      【解决方案2】:

      尝试这样做:

      awk '{if($2>10) print > "outfile1"; else print > "outfile2"}' infile
      

      如果您省略 ",您将重定向到(可能不存在的)变量。就我而言,我重定向到文件。

      【讨论】:

        【解决方案3】:
        awk '{print > "outfile" ($2>10 ? 1 : 2)}' infile
        

        【讨论】:

        • 嘿 - 这是我在黑暗中得到回应的镜头,但是...... awk 将 "outfile" 放入输入文件的目录中(或者至少这对我来说是正确的现在)。无论如何我可以更改目录吗?我也在使用动态文件名...... file = sprintf(...); print > file; ...
        • 当然,只要指定你喜欢的任何路径,例如print > "../outfile"print > "/usr/tmp/outfile" 或任何你需要的。
        • 没关系...我自己回答了。对不起。谢谢。
        【解决方案4】:

        你可以重复两次。

        cat infile | awk '{if($2>10) print}' > outfile; cat infile | awk '{if($2<=10) print}' > outfile2
        

        【讨论】:

        • a) 不要那样做,并且 b) 如果你这样做了,那就 awk-ishly: awk '$2>10' infile > outfile; awk '$2 outfile.
        【解决方案5】:

        用双引号引用你的目标文件名,然后你就可以开始了。

        【讨论】:

          最近更新 更多