我有很多(近100)大的CSV文件與第一列sellID。我知道一些sellID在2個或更多文件中重複2次或更多次。用grep可能找到所有這個重複的sellID(create map sellID-file_name)?或者爲此目的存在另一個開源應用程序?我的操作系統 - CentOS。grep是否允許搜索重複?
3
A
回答
1
這裏是一個非常簡單的,有些粗糙awk
腳本,你似乎是描述如何做到八九不離十的東西:
#!/usr/bin/awk -f
{ if ($1 in seenbefore) {
printf("%s\t%s\n", $1, seenbefore[$1]);
printf("%s\t%s\n", $1, FILENAME);
}
seenbefore[$1]=FILENAME;
}
正如你所希望揣所有我們正在做的是建立每個值的關聯數組你在第一列/字段中找到(在BEGIN
特殊塊中設置FS
以更改輸入字段分隔符...以獲得簡單無用的CSV支持形式)。當我們遇到任何重複的時候,我們會打印出這個文件,我們之前看到它的文件和當前的文件名。無論如何,我們隨後使用當前文件的名稱添加/更新數組。
使用更多的代碼,您可以存儲和打印每行的行號,將文件名/行號元組附加到列表中,並將所有輸出移動到END
塊,您可以用更簡潔的格式對其進行彙總,等等。
對於我個人轉而使用Python的數據類型更豐富的地方(實際列表和元組,而不必將它們連接成字符串或內置數組)以及我可以訪問更多功能(一個實際的CSV解析器,可以處理各種引用的CSV和其他分隔符,並且生成排序結果非常簡單)。
但是,這應該有希望讓你走上正確的軌道。
1
相關問題:https://serverfault.com/questions/66301/removing-duplicate-lines-from-file-with-grep
你可以貓在一個一個的所有文件,然後尋找受騙者爲鏈接上面的建議。
順便說一句,目前還不清楚你是否只想保留或刪除它們。
1
試試這個:
#Save duplicate columns
find path -type f -name '*.csv' -execdir cut -d, -f1 {} \+ | sort | uniq -d \
> duplicate-ids.log
#List duplicate records
find path -type f -name '*.csv' -execdir grep -F -f duplicate-ids.log {} \+
注:我沒有測試它。
1
另一個答案:
如果您SellID的長度是固定的(比如6個字符),可以使用
sort data.txt | uniq -w 6 -D
這將打印出不唯一的線
如果所有你想要做的就是自動刪除重複行(保留第一行),請嘗試:
sort -u --key=1,1 data.txt
相關問題
- 1. 允許重複的查詢搜索
- 2. 複合鍵是否允許重複
- 3. 允許重音符號是搜索?
- 4. BasicNameValuePair是否允許重複鍵?
- 5. Hashset允許重複?
- 6. HashMap允許重複?
- 7. 是否有一個搜索引擎api允許我看到搜索的流行?
- 8. 雅虎BOSS(版本2)是否允許自動搜索查詢?
- 9. 龜龜SVN是否允許在存儲庫中搜索?
- 10. 是否允許「複製」API數據庫?
- 11. ng不允許重複重複
- 12. 是否允許vector :: shrink_to_fit重新分配?
- 13. 是否允許類的「雙重依賴」?
- 14. CQRS第一NF閱讀模型 - 你是否允許重複?
- 15. has_and_belongs_to_many允許沒有重複
- 16. mlogit重複'row.names'不允許
- 17. 允許重複使用options_for_select
- 18. VBA - 允許重複項
- 19. Mysql查詢,允許重複
- 20. 轉換行允許重複
- 21. 如何不允許將重複項添加到二進制搜索樹中?
- 22. HashSet的犯規允許重複,但如何編寫邏輯允許重複
- 23. 如何修復允許重複
- 24. .NET類允許快速搜索
- 25. 允許免費用戶搜索Spotify API
- 26. LINQ搜索只允許等效
- 27. 子域不允許搜索機器人
- 28. 允許Android SDK通過網站搜索?
- 29. 允許通過標籤搜索?
- 30. 的setContentView不允許搜索工作
你能否澄清一下你的問題。你需要在許多文件中找到某些字符串的所有重複項? –
整個記錄是否重複,還是某些行具有相同的sellID但記錄的其餘部分不同? –
CSV =逗號分隔值。字符串中的第一個字段有時會在不同文件中複製。我只需要找到這些行。 – user710818