【问题标题】:Generate csv file in awk command在 awk 命令中生成 csv 文件
【发布时间】:2022-01-07 15:03:16
【问题描述】:

我正在执行以下 awk 命令来拆分文件并生成 .CSV 格式的输出。我尝试了很多方法来在脚本中传递正确的语法以在 csv 文件上生成,但没有运气。有人可以让我知道在哪里提到正确的语法。

awk -v lines="30000" -v pre="awk_part_" '
        NR==1 { header=$0; next}
        (NR-1) % lines ==1 { fname=pre c++; print header > fname}
        {print > fname}' patient.tsv

上述命令的工作原理:

  1. awk -v lines=”30000″ -v pre=”awk_part_” – 首先,我声明了两个 awk 变量来定义每个拆分文件中有多少记录以及文件名的前缀
  2. NR==1 { 标头=$0; next} – 当 awk 读取第一行时,它将该行存储在 header 变量中并停止进一步处理
  3. (NR-1) % 行 ==1 { fname=pre c++; print header > fname} – 当当前行是主干的第一条记录时,我们需要通过增加一个计数器(c)来更新文件名(fname)。另外,由于这将是一个新文件,我们将 header 变量的值作为第一行添加到文件中
  4. {print > fname}' Patient.tsv – 然后,我刚刚将每个记录行重定向到当前 fname 文件

【问题讨论】:

  • edit 您的问题包含minimal reproducible example,其中包含简洁、可测试的样本输入和预期输出,以便我们为您提供帮助。显然,对于 minimal reproducible example,您应该设置 lines=3 或类似的,而不是 3000。
  • 如何在上述awk命令中生成csv输出文件

标签: awk


【解决方案1】:

awk -v lines=”30000″ -v pre=”awk_part_” – 首先,我声明了两个 awk 变量来定义每个拆分文件中有多少记录以及 文件名前缀

根据Options in GNU AWK manual

-v var=val

(...) 将变量 var 设置为值 val before 执行 程序开始。这些变量值在BEGIN 中可用 规则(...)。

您显然试图在BEGIN 之外使用它,请尝试使用以下代码

awk 'BEGIN{lines=30000;pre="awk_part_"}
     NR==1 { header=$0; next}
     (NR-1) % lines ==1 { fname=pre c++; print header > fname}
     {print > fname}' patient.tsv

并检查它是否确实产生了您想要的。

【讨论】:

  • 您好 Daweo,在执行您的脚本后,它仍然没有生成 CSV 格式的输出文件。我正在使用的 awk 脚本可以很好地使用标题分割文件,但不是 CSV 格式...我尝试过使用其他脚本,但它需要时间..我们可以在 awk 命令中添加特定语法吗获取 CSV 格式。
  • @user3776623 它创建了哪些文件?行是否去了他们应该去的文件?
  • 行与标题一起进入文件。创建的文件扩展名为 FILE 格式。
  • @user3776623 如果你想以.csv结尾,只需将其添加到fname,即使用pre c++ ".csv"替换pre c++
  • 终于成功了!!!感谢大宇的帮助。为一个小而简单的东西找到正确的方法需要时间,但是当它努力工作时,它就像一个魅力......我实际上查看了很多论坛,但找不到这些简单的解决方案......
【解决方案2】:

@Daweo,行与标题一起进入文件。以 FILE 类型格式创建文件扩展名。参考截图awk_part_o in FILE format

【讨论】:

  • 我看不出这如何回答本页顶部的问题,但它应该。请edit根据How to Answer或删除答案。否则,它可能会被标记为“不是答案”并被删除。
  • 您知道您可以对自己的问题发表评论,不是吗?
  • 是的,我知道,因此删除了已回答的帖子。感谢您强调。
  • 是的.....这个帖子在这里?是不是应该按照How to Answer来回答?它给人的印象是只是对stackoverflow.com/a/70181207/7733418 的评论,而您可以在那里发表评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-28
相关资源
最近更新 更多