【问题标题】:Date/Time not coming properly in csv when written from bash从 bash 写入时,日期/时间在 csv 中不正确
【发布时间】:2023-03-12 20:05:02
【问题描述】:

我正在将逗号(,)分隔的数据从 .txt 文件写入 bash 中的 .csv。

执行此操作的部分 bash 代码。

   <path to file>/textfile.txt > <path to file>/csvfile.csv

除了具有日期/时间的数据外,所有数据都正确写入 csv 文件。

给定文本文件中的输入:

07/01/2021 00:22:21.948,LC firm
07/01/2021 00:31:01.975,5800

书面 CSV 文件:

CSV screenshot

如果我们单击单元格并查看编辑栏,则写入的日期/时间显示得有点正确,但默认情况下它在单元格中的显示方式不同。我不想要单元格或公式栏中的值。

我希望它在写入 csv 时采用以下格式。

07/01/2021 00:22:21.948 - with milliseconds

or

7/1/2021 12:22:21.948 AM - with milliseconds

任何帮助将不胜感激。

【问题讨论】:

  • 我在你的问题中没有看到任何 bash 代码.....
  • @user1934428 如果你能看到我的问题的第一行,这一行 - .../textfile.txt > .../csvfile.csv.. 来自我的 bash 脚本。
  • 这是 bash 命令的片段。不是我们可以合理讨论的内容。
  • @user1934428 对!这是将 txt 文件写入 csv 文件的唯一片段。因此,这里的讨论是在将其写入 csv 之前使用 bash 对已获得该日期/时间值的 txt 文件数据进行任何更改,以便我们可以将所需的值写入 csv
  • 这里没有命令!如果我只输入textfile.txt &gt;csvfile,则只有当textfile.txt 是可执行文件时才有效,但您需要提供有关此可执行文件的详细信息。如果它不是可执行文件,则没有可执行的内容。另外,textfile.txt 前面的三个句点对我来说似乎不是明智的 bash。

标签: excel bash shell csv


【解决方案1】:

使用 awk:

awk -F, '{ hr=substr($0,12,2);if (hr<=12) { ampm="AM" } else { ampm="PM" };$1=$1" "ampm" - With Miliseconds";OFS="," }1' txtfile.txt > csvfile.csv

将逗号设置为字段分隔符,然后使用 substr 从行中提取小时。检查 hr 变量以发现它是否在 12 或之前,如果是,则将变量 ampm 设置为 AM,否则 ampm 为 PM。相应地修改第一个字段并打印行。

输出:

07/01/2021 00:22:21.948 AM - With Miliseconds,LC firm
07/01/2021 00:31:01.975 AM - With Miliseconds,5800

【讨论】:

  • 感谢您对此进行检查。我试过你的代码,它工作得很好,但只有第一行有问题,比如将第二列附加到第一列。 pasteboard.co/JIFuMIz.png
  • 能确定txt文件第一行有逗号吗?
  • 不..我的意思是说,在我用红色突出显示的第一行中,它将第二列值附加到第一列并在第一列中给出。输出应该是这样的pasteboard.co/JIFxuVD.png
  • 是的。 txt文件的第一行有逗号
  • 它对每一行应用相同的逻辑,因此第 1 行的文本文件中肯定有一些奇怪的东西(如果考虑到标题,则为第 2 行)
猜你喜欢
  • 2011-04-12
  • 1970-01-01
  • 2013-04-17
  • 2016-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-13
  • 2021-02-05
相关资源
最近更新 更多