2015-06-09 50 views
2

我有這樣一個CSV文件,刪除重複的逗號分隔字符串:(名爲test2.csv)如何用awk

lastname,firstname,83494989,1997-05-20,2015-05-07 15:30:43,Sentence Skills 104,Sentence Skills 104,Elementary Algebra 38,Elementary Algebra 38,Sentence Skills 104,Sentence Skills 104,Elementary Algebra 38,Elementary Algebra 38, 

我想刪除重複項

我已經得到的最接近是下面的awk命令

awk '{a[$0]++} END {for (i in a) print RS i}' RS="," test2.csv 

它的工作原理,但會導致新的問題,它採用的值亂序,並把他們的行這樣的:

,Elementary Algebra 38 
,2015-05-07 15:30:43 
,Sentence Skills 104 
,FirstName 
,LastName 
,1997-05-20 
,83494989 

我需要保持他們的順序,讓他們在同一行(我可以修復該行的問題,但不知道如何解決的順序問題)與解決方案

更新:

從anubhava答案偉大的工作,我加了一個問題,關於從日期和埃德莫頓取出時間,幫助了,下面是完整的查詢

awk 'BEGIN{RS=ORS=","} {sub(/ ..:..:..$/,"")} !seen[$0]++' test2.csv 

回答

7

你可以使用這個AWK:

awk 'BEGIN{RS=ORS=","} !seen[$0]++' test2.csv 
lastname,firstname,83494989,1997-05-20,2015-05-07 15:30:43,Sentence Skills 104,Elementary Algebra 38, 
+0

真棒,超級乾淨。我尋找其他方式來做到這一點,但他們看起來很複雜。 – moore1emu

+0

現在我需要弄清楚如何從一個日期中刪除24小時的時間。一直試圖用正則表達式和sed,但似乎無法使它工作 – moore1emu

+2

@ moore1emu如果你使用awk你不需要/想要sed或grep或其他任何東西,因爲awk可以在內部做任何其他工具可以做的有用的事情。在'!seen'之前,你只是想要'{sub(/ ..:..:.. $ /,「」)}'這樣的東西。 –