Linux---積累----處理文本技巧---去重

對文本的內容進行去重是一個 很常見的需求,excel也可以進行處理但是有數量的限制,而linux更適用於處理比較大的數據量的去重,更大的數據量去重則需要考慮使用spark等大數據框架進行運算。

本文記錄 linux實現去重的操作命令

準備數據

示範:

vi barcode_list
# 輸入內容

0001
0002
0003
0004


vi losebarcode.txt

# 輸入內容

0002
0003
0005

快速去重命令

去掉文件barcode_list和losebarcode.txt都包含的編碼,重複的編碼

cat barcode_list losebarcode.txt |head
cat barcode_list losebarcode.txt |sort|uniq -c |sort -k 1 -n -r |head
cat barcode_list losebarcode.txt |sort|uniq -c |sort -k 1 -n -r |awk '{if($1==1){print $2}}'
cat barcode_list losebarcode.txt |sort|uniq -c |sort -k 1 -n -r |awk '{if($1==1){print $2}}' > x.txt
cat barcode_list  |wc -l
cat x.txt  |wc -l

主要的思路是 先合併兩個文件,然後進行 排序,合併編碼對數量進行統計,使用awk篩選出 數量爲1的 寫入到x.txt中,則 x.txt中爲 不重複的 編碼

輸出如下:

[zzq@host3 ~]$ cat barcode_list losebarcode.txt |sort|uniq -c |sort -k 1 -n -r |awk '{if($1==1){print $2}}'
0005
0004
0001
[zzq@host3 ~]$ 

查看losebarcode.txt中有 barcode_list沒有的

head barcode_list
grep -wFf barcode_list losebarcode.txt -v| head 
grep -wFf barcode_list losebarcode.txt -v| wc -l
grep -wFf barcode_list losebarcode.txt -v  >  loseonly.txt

grep -w用於字符串精確匹配
grep -f<規則文件> 或 --file=<規則文件> : 指定規則文件,其內容含有一個或多個規則樣式,讓grep查找符合規則條件的文件內容,格式爲每行一個規則樣式。
grep -F 或 --fixed-regexp : 將樣式視爲固定字符串的列表

以上三個參數 都是 處理格式問題,讓每一行作爲一個單位來精確對比

grep -v 或 --revert-match : 顯示不包含匹配文本–不包含匹配字符串的所有行 barcode_list作爲匹配文本 ,顯示losebarcode.txt中不包含barcode_list的部分,就是 losebarcode.txt中有 barcode_list沒有的

使用命令輸出如下:

[zzq@host3 ~]$ grep -wFf barcode_list losebarcode.txt -v
0005
[zzq@host3 ~]$ 

去掉指定的兩行數據

cat barcode_list |grep -v "0002" |grep -v "0003"
cat barcode_list |grep -v "0002" |grep -v "0003"|wc -l
cat barcode_list |grep -v "0002" |grep -v "0003" > xx.txt

輸出如下:

[zzq@host3 ~]$ cat barcode_list |grep -v "0002" |grep -v "0003"
0001
0004
[zzq@host3 ~]$ 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章