導航:首頁 > 文件類型 > linux超大文件去重

linux超大文件去重

發布時間:2023-04-19 05:46:24

A. linux文件合並,關鍵字去重復shell腳本

看看這個:

[seesea@UC ~]$ join -t'|' <(sort -t'|' -k1,1 -r -k5,5 a.txt | uniq -w3 | sort -t'|' -k1,1) <(sort -t'|' -k1,1 b.txt) > c.txt
[seesea@UC ~]$ cat c.txt

123|kkk|jjj|sss|2013-02-21 16:11:07|OFF
135|bbb|ccc|ddd|2013-01-28 16:11:07|ON
456|kkk|jjj|sss|2013-01-28 16:11:07|ON
789|kkk|jjj|sss|2013-02-21 16:11:07|OFF

-------------------
另一個方案:

[seesea@UC ~]$ awk -F'|' 'NR==FNR{b[$1]=$2}; NR!=FNR{a[$1]=$0 OFS b[$1]; ti[$1]=(ti[$1]<$5?$5:ti[$1])}; END{for (i in a){if (a[i]~ti[i]) print a[i]}}' b.txt a.txt > c.txt
[seesea@UC ~]$ cat c.txt
456|kkk|jjj|sss|2013-01-28 16:11:07 ON
123|kkk|jjj|sss|2013-02-21 16:11:07 OFF
135|bbb|ccc|ddd|2013-01-28 16:11:07 ON
789|kkk|jjj|sss|2013-02-21 16:11:07 OFF

-------------------
兩方案都破壞原有的順序,如果你要保持 a.txt 中的順序,你另外做個排序吧

B. Linux下C++讀取文件去重的問題

#include<fstream>
#include<vector>
#include<string>
#include<algorithm>
#include<iostream>
#include<sstream>

classdata_t{
public:
data_t():val(5){}

std::string&operator[](intconsti){
returnval[i];
}
std::stringconst&operator[](intconsti)const{
returnval[i];
}

private:
std::vector<std::string>val;
};

template<inti>
structcmp1{//用於sort函數
booloperator()(data_tconst&a,data_tconst&b)const{
returna[i]<b[i];
}
};

template<inti>
structcmp2{//用於unique函數
booloperator()(data_tconst&a,data_tconst&b)const{
returna[i]==b[i];
}
};

intmain(){
std::ifstreamistr("input.txt");
if(!istr){
std::cerr<<"文件打開失敗 ";
return__LINE__;
}

typedefstd::vector<data_t>vector_t;
vector_tdata;
//讀取文件
std::stringline;
intline_num=0;
while(getline(istr,line)){
++line_num;
data_ttmp_data;
std::istringstreamtmp_str(line);
inti=0;
for(;i!=5;++i){
if(!getline(tmp_str,tmp_data[i],' ')){
std::cerr<<"在第"<<line_num<<"行發生錯誤 ";
}
}
if(i==5){//該行讀取成功
data.push_back(tmp_data);
}
}

//按關鍵字1去重
std::sort(data.begin(),data.end(),cmp1<0>());
vector_t::iteratorlast=std::unique(data.begin(),data.end(),cmp2<0>());
//按關鍵字2去重
std::sort(data.begin(),last,cmp1<1>());
last=std::unique(data.begin(),last,cmp2<1>());

data.erase(last,data.end());

//輸出到另一個文件
std::ofstreamostr("output.txt");
if(!ostr){
std::cerr<<"文件打開失敗 ";
return__LINE__;
}

for(inti=0;i!=data.size();++i){
for(intj=0;j!=5;++j){
ostr<<data[i][j]<<" ";
}
ostr<<" ";
}

return0;
}

輸入文件為input.txt,樣例:

111222333444555
111222333444555
1111222333444555
1111222333444555
11111222333444555
11111222333444555
輸出到output.txt,樣例:
111222333444555

C. linux中怎麼按條件去重一個文件

cat 文件 | sort | uniq -w1

D. 如何在 Linux 中刪除超大的文件

1. 通過重定向到 Null 來清空文件內容

E. Linux json文件(排序|去重)

文件 test.log json文件數據

根據 data.ext.uid 欄位排序

使用 jq 去重數據,並只顯示 data.ext.uid 欄位

多維度去重

F. linux文件行排序去重結果不同sort和uniq

騷年,你有仔細觀察者兩個命令嗎?
舉個例子:
文件filea為:
a
b
c
c
d
b
執行sort filea |uniq -u |wc -l,先排序,則刪除了伏模c和b的行缺漏緩;
執行sort -u filea |wc -l,排序,同時刪除相同搜激的行,則只刪除c行。

G. 利用Linux命令行進行文本按行去重並按重復次數排序

利用linux命令行進行文本按行去重並按重復次數排序linux命令行提供了非常強大的文本處理功能,組合利用linux命令能實現好多強大的功能。本文這里舉例說明如何利用linux命令行進行文本按行去重並按重復次數排序。主要用到的命令有sort,uniq和cut。其中,sort主要功能是排序,uniq主要功能是實現相鄰文本行的去重,cut可以從文本行中提取相應的文本列(簡單地說,就是按列操作文本行)。用於演示的測試文件內容如下:[plain]Hello
World.
Apple
and
Nokia.
Hello
World.
I
wanna
buy
an
Apple
device.
The
Iphone
of
Apple
company.
Hello
World.
The
Iphone
of
Apple
company.
My
name
is
Friendfish.
Hello
World.
Apple
and
Nokia.
實現命令及過程如下:[plain]1、文本行去重
(1)排序
由於uniq命令只能對相鄰行進行去重復操作,所以在進行去重前,先要對文本行進行排序,使重復行集中到一起。
$
sort
test.txt
Apple
and
Nokia.
Apple
and
Nokia.
Hello
World.
Hello
World.
Hello
World.
Hello
World.
I
wanna
buy
an
Apple
device.
My
name
is
Friendfish.
The
Iphone
of
Apple
company.
The
Iphone
of
Apple
company.
(2)去掉相鄰的重復行
$
sort
test.txt
|
uniq
Apple
and
Nokia.
Hello
World.
I
wanna
buy
an
Apple
device.
My
name
is
Friendfish.
The
Iphone
of
Apple
company.
2、文本行去重並按重復次數排序
(1)首先,對文本行進行去重並統計重復次數(uniq命令加-c選項可以實現對重復次數進行統計。)。
$
sort
test.txt
|
uniq
-c
2
Apple
and
Nokia.
4
Hello
World.
1
I
wanna
buy
an
Apple
device.
1
My
name
is
Friendfish.
2
The
Iphone
of
Apple
company.
(2)對文本行按重復次數進行排序。
sort
-n可以識別每行開頭的數字,並按其大小對文本行進行排序。默認是按升序排列,如果想要按降序要加-r選項(sort
-rn)。
$
sort
test.txt
|
uniq
-c
|
sort
-rn
4
Hello
World.
2
The
Iphone
of
Apple
company.
2
Apple
and
Nokia.
1
My
name
is
Friendfish.
1
I
wanna
buy
an
Apple
device.
(3)每行前面的刪除重復次數。
cut命令可以按列操作文本行。可以看出前面的重復次數佔8個字元,因此,可以用命令cut
-c
9-
取出每行第9個及其以後的字元。
$
sort
test.txt
|
uniq
-c
|
sort
-rn
|
cut
-c
9-
Hello
World.
The
Iphone
of
Apple
company.
Apple
and
Nokia.
My
name
is
Friendfish.
I
wanna
buy
an
Apple
device.
下面附帶說一下cut命令的使用,用法如下:[plain]cut
-b
list
[-n]
[file
...]
cut
-c
list
[file
...]
cut
-f
list
[-d
delim][-s][file
...]
上面的-b、-c、-f分別表示位元組、字元、欄位(即byte、character、field);
list表示-b、-c、-f操作范圍,-n常常表示具體數字;
file表示的自然是要操作的文本文件的名稱;
delim(英文全寫:delimiter)表示分隔符,默認情況下為TAB;
-s表示不包括那些不含分隔符的行(這樣有利於去掉注釋和標題)
三種方式中,表示從指定的范圍中提取位元組(-b)、或字元(-c)、或欄位(-f)。
范圍的表示方法:
n
只有第n項
n-
從第n項一直到行尾
n-m
從第n項到第m項(包括m)
-m
從一行的開始到第m項(包括m)
-
從一行的開始到結束的所有項
在寫這篇文章的時候,用到了vim的大小寫轉化的快捷鍵:gu變小寫,gU變大寫。結合ctrl+v能夠將一片文字中的字元進行大小寫轉換,非常好用。

H. linux去重命令

linux重啟命令是:

1、在命令行中輸入: shutdown -r now : 表示現在重啟計算機,按下回車便會進行重啟。

銀虛2、另一種重啟方式就是輸入: reboot 也表示重啟,一樣會進行重啟。

Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基於POSIX和Unix的多用戶、多任務、支持多線程和多CPU的操作系統。它能運行鋒正燃主要的Unix工具軟體、應用程序網路協議。它支持32位和64位硬體。Linux繼承了Unix以網路為核心的設計思想,是一個性能穩定的多用戶網清茄絡操作系統。

I. linux 文本處理,去重問題

sortinput_file|uniq-w1

J. Linux下怎麼合並一個文件夾下的所有文件,規則就是 只要任意兩個文件含有一個相同的數字

while [ 1 -eq 1 ] ##無限循環直到所有文件相同的文件合並成功
do
i=0 ##使用數組應該好一些
j=0
for a in $(ls /xxx/xxx/*)
do
b[$i]=$a ##獲取的所有文件賦予給數組
let i=i+1
done
while [ j -ln ${#b[@] ] ##文件有多個次,循環多少次,拿文件比較
do
for c in $(awk 'for(i=1;i<=4;i++){printf $i}' ${b[$j]}) ##文件裡面有多少數據,循環多少次
do
let d=j+1
e=`cat ${b[$d]}|grep $c` ##拿第一個文件與後面一個文件比是否存有相同的數
if [ $e -eq 1 ]
then
sort -u ${b[$j]} ${b[$d]} > $j.txt ##如腔族果有重復的就合並到文件,沒有繼續與第3個文件比較
break; ##然後終止循環,為什麼要終止循環?因為合並的文件還有可能與後面的文件重 ## 復數字,故退出循環,掘圓蔽進入大的循環再獲取新的判州文件比較
else if [ j -eq $(${#b[@]-1) ] ##如果比到倒數第二個文件和最後一個文件沒有沒有相似點則退出程序, ##比較完畢
exit;
fi
done
then
exit
fi
done
done

閱讀全文

與linux超大文件去重相關的資料

熱點內容
蘭博玩游戲路徑怎麼選擇正確文件 瀏覽:972
淘寶直通車恢復老版本 瀏覽:510
播放草莓的圖片我都文件 瀏覽:55
微信大文件打不開 瀏覽:767
家裝合同准備哪些文件 瀏覽:296
應用bat合並excel文件 瀏覽:984
迅雷影音文件夾 瀏覽:109
makefile的文件路徑 瀏覽:392
計算機程序文件名擴展名為 瀏覽:982
網路游戲推廣策劃案 瀏覽:609
替換所有文件內容的代碼 瀏覽:960
不是常用數據模型有哪些 瀏覽:426
aspcms版本號 瀏覽:835
安卓怎麼用數據流量下載軟體 瀏覽:553
大眾手動空調數據流通道號是多少 瀏覽:303
手機qq令牌 瀏覽:737
cg原畫上色教程 瀏覽:993
婚介服務中心app怎麼做 瀏覽:43
日本蘋果66g多少錢 瀏覽:93
個性的文件夾名稱 瀏覽:697

友情鏈接