2011-03-28 80 views
1

我有一个文件是'|'分隔。文件中的一个字段是时间戳。该字段采用以下格式:MM-dd-yyyy HH:mm:ss我希望能够打印到文件的唯一日期。我可以使用cut命令(cut -f1 -d'|' _file_name_ |sort|uniq)来提取唯一的日期。然而,随着时间的部分领域,我看到了数百个结果。在我运行切割命令后,我想要用前十一个字符的子字符串来显示唯一的日期。我尝试使用awk命令,例如: awk ' { print substr($1,1-11) }' | cut -f1 -d'|' _file_name_ |sort|uniq > _output_file_如何从unix中的剪切命令的结果中提取子字符串?

我没有运气。我是否以这种错误的方式去做?有没有更简单的方法来提取我需要的数据。任何帮助,将不胜感激。

+0

请求。添加目前为止_get_的输出示例,以及如何查看它的示例。 – 2011-03-28 16:16:29

+0

Smith | John | smithj | 1234567 | 8910 | Smoe | Joe | 2011-03-27 04:04:04 | 123 Main St | Tampa | FL | 33611 | 输出:'2011-03-27' – 2011-03-28 16:26:16

回答

2

你们都在那里。这是基于这样的思想:日期时间戳是字段1

编辑:改场到10,也用-u选项,而不是排序九月工艺与uniq的

你不需要切,awk会为你做。

awk -F"|" ' { print substr($10,1,11) }' _file_name_ |sort -u > _output_file_ 

我希望这会有所帮助。

P.S.因为你似乎是一个新用户,如果你得到一个可以帮助你的答案,请记住将它标记为已接受,或者给它一个+(或 - )作为有用的答案

+0

谢谢,这正是我所需要的。 – 2011-03-28 16:32:19

+0

'-u'选项的作用是什么? – 2011-03-28 16:51:04

+1

你有'| uniq';这是一个额外的过程,因为排序有''-u''选项可以做同样的事情(当它排序数据时)。但是,鉴于你正在处理的数据类型,你可能会发现'... |排序| uniq -c'提供一个有趣的统计信息。 uniq的'-c'选项显示您找到的记录** count **。然后你会看到,例如,2011-03-25有5270次访问,而201-03-27只有10次。取决于你在做什么,这类信息可能会有所帮助。我希望这有帮助。 – shellter 2011-03-28 17:36:10

3

cut -c1-11将显示每个输入行的字符1-11。

+0

对不起,我设置-f为1的问题。但是,该字段实际上位于分隔文本文件的位置10。因此,当我尝试'剪切-f10 -d'|' -c1-11 my_file.txt | sort | uniq'我得到一个错误。 “只能指定一种类型的列表。” – 2011-03-28 16:18:47

+0

'cut -f10 -d'|' my_file.txt | cut -c1-11 |排序-u'应该做的。 – 2011-03-28 16:46:26

+0

所有这些当然如果你想避免'awk'。第二,使用它比建造长管更好。 – 2011-03-28 16:47:12

3

如果日期是文件中的第(空格隔开)字段,那么唯一的日期列表仅仅是:

cut -f1 -d' ' filename | sort -u 

更新:除了@ shellter是正确的答案,我只是现在演示其他awk工具的替代方案:

awk '{split($10, a); date[a[1]]++} END {for (d in date) print d}' filename 
+0

谢谢格伦,请参阅第一个答案下的评论。该字段的位置不在该行的开头。 – 2011-03-28 16:21:34

相关问题