【问题标题】:Write command output to a csv file in perl在 perl 中将命令输出写入 csv 文件
【发布时间】:2023-03-11 14:11:01
【问题描述】:

我正在尝试将命令输出写入 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

【问题讨论】:

  • 请记住,CSV 格式需要转义可能出现在数据中的任何引号。
  • 有关 Perl 解决方案,请参阅 this answer
  • 您对这部分的哪一部分有问题? ps 部分、grep 部分还是 awk 部分?您是否尝试在不调用 ps 的情况下在 Perl 中完成所有这些操作?
  • “不工作”到底是什么意思?请提供minimal reproducible example。此外,您的代码都没有使用 Perl,那么这与您的问题有什么关系?

标签: shell perl


【解决方案1】:

tadman评论中的link信息量很大,但你也可以这样做

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】:

    这是一个简单的方法,使用-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
    

    【讨论】:

      猜你喜欢
      • 2021-02-26
      • 2012-02-18
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-23
      相关资源
      最近更新 更多