代码之家  ›  专栏  ›  技术社区  ›  Developer

在perl中将命令输出写入csv文件

  •  2
  • Developer  · 技术社区  · 7 年前

    我正在尝试将命令输出写入csv文件。下面是我要用于将数据写入csv文件的命令

    ps -eo pid,comm,pmem,vsz | grep process  | awk '{print $1",",$2",",$3",",$4}'
    

    我们如何在Perl中做到这一点。csv文件的头应该有相应的值:

    pid,comm,pmem,vsz
    

    我想做这样的事,但对我不起作用:

    echo "execution started.."
    
    pid,comm,pmem,vsz >> out.txt
    
    while [ true ]; do
        echo "running.."
        sleep 2
        ps -eo pid,comm,pmem,vsz | grep process  | awk '{print $1",",$2",",$3",",$4}' >> out.txt
    done
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   zdim    7 年前

    这个 link 在评论中 tadman 有很多信息,但你也可以

    ps -eo pid,comm,pmem,vsz | grep process_name | 
        perl -nE '
            BEGIN { say "pid,comm,pmem,vsz" }; 
            say join ",", split
        ' > ps_process.out
    

    (为了可读性分成多行)

    BEGIN 块只在编译阶段执行,所以它不会在迭代中重复。

        2
  •  0
  •   beasy    7 年前

    下面是一个简单的方法,使用 -a 切换到隐式创建 @F 对于每一行输入(这是 @F = split /\s+\, $_ )

    echo pid,comm,pmem,vsz > out.csv
    ps -eo pid,comm,pmem,vsz | perl -lnaE 'say join ",", @F' >> out.csv