【问题标题】:How can I get the second column of a very large csv file using linux command?如何使用 linux 命令获取非常大的 csv 文件的第二列?
【发布时间】:2016-09-06 05:49:09
【问题描述】:

我在一次采访中被问到这个问题。我说我可以使用 java 或 python 之类的 xreadlines() 函数来遍历整个文件并获取列,但面试官希望我只使用 linux cmd。我怎样才能做到这一点?

【问题讨论】:

标签: linux csv command-line large-files


【解决方案1】:

您可以使用命令awk

以下是打印文件第二列的示例:

awk -F, '{print $2}' file.txt

为了存储它,你将它重定向到一个文件中:

awk -F, '{print $2}' file.txt > output.txt

【讨论】:

  • 谢谢,虽然这解决了 csv 文件的问题,“大”点怎么样?我可以使用 awk 将列输出到文件吗?
  • 标准 I/O 重定向以制作结果文件。 awk -F, '{print $2}' file.txt > /some/file/path
  • 如果没有 -F 标志,上述使用 awk 的解决方案将无法工作。默认情况下,Awk 在空白处拆分,而不是逗号。
  • @PythonNewHand 所有这些方法(awk 或 cut)逐行处理输入文件,并且尽可能快。所以是的,它们非常适合“大”文件。
【解决方案2】:

我会添加到 Andreas 的答案中,但还不能发表评论。

使用 csv,您必须给 awk 一个字段分隔符参数,否则它将定义由空格而不是逗号绑定的字段。 (显然,使用不同字段分隔符的 csv 需要声明不同的字符。)

awk -F, '{print $2}' file.txt

【讨论】:

    【解决方案3】:

    你可以使用cut:

    cut -d, -f2 /path/to/csv/file
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-07
      • 2013-04-14
      相关资源
      最近更新 更多