【问题标题】:Filtering a file in mac terminal在 mac 终端中过滤文件
【发布时间】:2017-10-17 10:36:55
【问题描述】:

我完全是新手,抱歉,如果标签不正确,我不完全确定 mac 终端和 unix/linux 之间的区别。

我正在我的 mac 终端上处理一个文本文件。

我正在尝试过滤第 4 列,以便只显示带有 John 的行。然后将第 3 行导出到 csv。

示例:

1 | 11/11/11 | 8:01 | John was here<br/>
2 | 12/11/11 | 8:02 | Derek was here<br/>
3 | 13/11/11 | 8:03 | John was also here<br/>
4 | 14/11/11 | 8:04 | Bob was here<br/>                          

到目前为止,我只成功导出了我希望过滤的值...

cut -f 4 Data_File_Name | grep -o "John" | sort -r > Export_CSV_File.csv

我缺少显示只有 John 的数据而只导出特定列的基础知识。

任何帮助将不胜感激

【问题讨论】:

  • | 是分隔符还是您只是为了清楚起见才在这里显示?您的问题不是很清楚,请添加示例输出。

标签: linux shell unix terminal data-science


【解决方案1】:

您正在以正确的方式接近它,但存在一些问题。

cut的默认分隔符是制表符,所以你需要告诉它使用|cut -d '|' -f 4 Data_File_Name

这会给你:

 John was here
 Derek was here
 John was also here
 Bob was here

注意每一行前的多余空格。如果需要,您可以使用 cut -c 2- 删除它

grep 的-o 标志将导致它只输出匹配的那部分行。如果你想要完整的列,你应该省略这个标志:grep "John"

综合:

cut -d '|' -f 4 Data_File_Name | cut -c 2- | grep "John" | sort -r

John was here
John was also here

编辑: 如果您使用制表符作为分隔符,并且制表符前后没有前导空格(因为在管道周围有|):

cut -f 4 Data_File_Name | grep "John" | sort -r

【讨论】:

  • 我忘了说文本文件中的分隔符是制表符
  • 在这种情况下,不要包含-d '|',它应该可以正常工作。如果制表符后面没有空格,您也可能不需要 cut -c 2- 部分。
  • 嘿,汤姆,我将如何只显示包含 john 的行的时间?我尝试添加 | sort -k 3 > Export_File_CSV.csv 但这不起作用
  • 您可以先 grep 查找 John,然后使用 cut 获取您想要的列。
  • 您需要将文件传递给 grep 而不是 cut:grep "john" Data_File | cut -f 3
猜你喜欢
  • 2015-10-26
  • 1970-01-01
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
  • 2012-05-02
  • 2011-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多