Bash:用引号、逗号和换行符解析 CSV

标签 bash csv awk cut gawk

假设我有以下 csv 文件:

 id,message,time
 123,"Sorry, This message
 has commas and newlines",2016-03-28T20:26:39
 456,"It makes the problem non-trivial",2016-03-28T20:26:41

我想编写一个只返回时间列的 bash 命令。即

time
2016-03-28T20:26:39
2016-03-28T20:26:41

最直接的方法是什么?您可以假定标准 unix 实用程序的可用性,例如 awk、gawk、cut、grep 等。

请注意转义的 ""和用

进行微不足道尝试的换行符的存在
cut -d , -f 3 file.csv

徒劳的。

最佳答案

作为chepner said ,我们鼓励您使用能够解析 csv 的编程语言。

这里有一个python的例子:

import csv

with open('a.csv', 'rb') as csvfile:
    reader = csv.reader(csvfile, quotechar='"')
    for row in reader:
        print(row[-1]) # row[-1] gives the last column

关于Bash:用引号、逗号和换行符解析 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36287982/

相关文章:

linux - bash 脚本中的 [...] 代表什么?

bash - 将 shell 配置为始终在新行上打印提示,例如 zsh

bash - mawk 语法适用 >1000 字段文件用于按列计算非数字数据?

python - 使用 Python 获取每个 CSV 列中的字符串计数

awk - 使用 awk 将列附加到文件

bash - 查找 bash 中第一列中每个不同值的第 n 列中的最大值

ios - 有没有办法用脚本创建一个 swift 类并在预构建中添加属性?

bash - 在 Azure Devops 中,如何在 "Azure CLI task v.2"运行的 shell 脚本中使用管道变量?

string - 如何强制 Text::CSV 将数字存储为文本?

bash - 如何使用 find 和 awk 提取文件名的一部分