2011-03-28 81 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

相關問題