第一:兩個文件的交集,並集
前提條件:每個文件中不得有重復行
1. 取出兩個文件的並集(重復的行只保留一份)
2. 取出兩個文件的交集(只留下同時存在於兩個文件中的文件)
3. 刪除交集,留下其他的行
1. cat file1 file2 | sort | uniq > file3
2. cat file1 file2 | sort | uniq -d > file3
3. cat file1 file2 | sort | uniq -u > file3
第二:兩個文件合並
一個文件在上,一個文件在下
cat file1 file2 > file3
一個文件在左,一個文件在右
paste file1 file2 > file3
第三:一個文件去掉重復的行:
sort file |uniq
注意:重復的多行記為一行,也就是說這些重復的行還在,只是全部省略為一行!
sort file |uniq -u
上面的命令可以把重復的行全部去掉,也就是文件中的非重復行!
具體細節可以查看,cat,sort,uniq等命令的詳細介紹
第四:將一個大的文件分割成多個小文件:
采用一個50M大小的日志文件進行測試。
日志文件名:log.txt.gz。
文件行數:208363
語法:split [-<行數>][-b <字節>][-C <字節>][-l <行數>][要切割的文件][輸出文件名]
# wc -l log.txt //計算一個文件的總行數;
208363 log.txt# split -l 120000 log.txt newlog //通過指定行數,將日志分割成兩個文件 ;
# du -sh *50M log.txt
29M newlogaa
22M newlogab
# file * //分割后的文件與原文件屬性一樣
log.txt: ASCII text, with very long lines, with CRLF line terminators
newlogaa: ASCII text, with very long lines, with CRLF line terminators
newlogab: ASCII text, with very long lines, with CRLF line terminators
# gzip newlogaa newlogab //將分割后的文件進行壓縮,以便傳輸
# gunzip log.txt.gz //一定要先解壓,否則分割的文件是不能cat/zcat顯示;
#dd bs=20480 count=1500 if=log.txt of=newlogaa //按大小分第一個文件
#dd bs=20480 count=1500 if=log.txt of=newlogab skip=1500 //將大小之后的生成另一個文件#file *
log.txt: ASCII text, with very long lines, with CRLF line terminatorsnewlogaa: ASCII text, with very long lines, with CRLF line terminators
newlogab: ASCII text, with very long lines, with CRLF line terminators
#gzip log.txt.gz //如不解壓縮,下面請用zcat。
#wc -l log.txt //統計一個行數
208363 log.txt
# head -n `echo $((208363/2+1))` log.txt > newloga.txt //前x行重定向輸出到一個文件中;
#tail –n `echo $((208363-208362/2-1))` log.txt >newlogb.txt //后x行重定向輸出到一個文件中;
#gzip newloga.txt newlogb.txt //將兩個文件進行壓縮
#gzip log.txt.gz#awk ‘{if (NR<120000) print $0}’ log.txt >newloga.txt#awk ‘{if (NR>=120000) print $0}’ log.txt >newlogb.txt
#awk ‘{if (NR<120000) print $0 >”newloga.txt”;if (NR>=120000) print $0>”newlogb.txt”}’ log.txt
Cat log.txt| head –12000 >newloga.txt
Cat log.txt | tail –23000 >newlogb.txt
如用此方法分割文件的后一部分,那么執行第二行命令文件時,前x行是白白讀一遍的,執行的效率將很差,如文件過大,還可能出現內存不夠的情況。