【问题标题】:Redirecting output from terminal to specific sheet in .csv file将终端的输出重定向到 .csv 文件中的特定工作表
【发布时间】:2020-08-10 01:04:09
【问题描述】:

我想将终端的一些输出重定向到电子表格中的工作表。这在 bash 中可行吗?

具体来说,我已经生成了一些显示在终端中的输出。我已设法将此输出重定向到 .csv 文件中的工作表,如下所示:

COMMAND awk '{print $1,$2}' > FILE.csv

$1,$2 将终端输出的第 1 列和第 2 列重定向到 FILE.csv 中的工作表。

a) 是否可以指定输出重定向到哪个工作表?也就是说,如何修改上述命令,以便将输出重定向到例如 FILE.csv 的第 25 页?

b) $ 表示要输出到 .csv 文件的终端输出的列。仅将第 1 列第 2 行输出到 .csv 文件的语法是什么?

编辑

终端输出的形式

X1, Y1 X2, Y2 ...

由大约 1000 行组成,我想将 Xi 值复制到 .csv 文件中的 B 列,将 Yi 值复制到 C 列。

我有很多这样的输出都是单独生成的,所以一般来说,我希望它们在一个 .csv 文件中彼此相邻。也就是说,上面的输出可以进入B列和C列,然后另一个这样的输出可以进入D列和E列等等......

【问题讨论】:

  • CSV 文件仅包含一个工作表。事实上,CSV 定义甚至不知道 sheet 概念
  • @Poshi 谢谢你的评论。我知道了。实际上,我首先尝试使用 .xlsx,但由于某种原因,我无法打开它,因此尝试使用 .csv。您知道将输出重定向到 .csv 文件中某个列的语法吗?
  • @CAF 这是因为 xlsx 实际上是一个存档(就像 zip 一样),其中包含定义文档结构的 XML 文件。迁移到 python,它可能有一个库。
  • @Bayou 谢谢。出于我的目的,实际上可以将终端输出重定向到 .csv 文件中的某个列。这是否可以通过修改我的 OP 中的命令来实现?
  • 可以使用sed,但您必须编写一些正则表达式。如果没有在您的问题中添加任何输入和预期输出,我将无法为您提供帮助。

标签: bash csv redirect terminal output


【解决方案1】:

在 Linux 中,您可以使用 paste 实现此目的:

paste -d "," <(COMMAND1 | awk '{print $1","$2}') \
  <(COMMAND2 | awk '{print $1","$2}') \
  (more COMMANDs...) \
> FILE.csv

当然,这只有在所有 COMMAND 输出相同的行数时才有效。

如果不是这样,您可以使用join 按匹配的标识符列合并文件。

【讨论】:

  • 由于 Mac OS 是基于 Unix 的,许多这些基本的命令行工具在这两个世界中都存在。只需在终端输入paste 即可检查该命令是否存在。
  • 粘贴 -d "," file.csv
  • 在这种情况下COMMAND 是什么?
  • COMMAND is ./a.out SOMETHING... 实际上我现在设法将一些输出输出到 .csv 但您的命令不是总是写入第 1 列和第 2 列吗? (通过 1 美元、2 美元)
  • 是的,每个人 &lt;(COMMAND | awk '{print $1","$2}') 打印两列,但 paste 将它们按列组合成一个更广泛的表格。为此,您必须使用COMMAND 的两个或更多实例。在您的情况下,最好将每个 COMMAND 的输出收集到一个文件中并在所有输出文件上运行 paste -d "," ...
猜你喜欢
  • 1970-01-01
  • 2017-03-14
  • 2017-12-01
  • 2022-11-11
  • 2014-03-16
  • 2021-01-27
  • 2012-11-15
  • 1970-01-01
  • 2013-01-06
相关资源
最近更新 更多