2013年5月8日星期三

linux下,用shell对大文件进行排序和去重(设计思路和关键指令)

思路和关键指令:
   split 拆分大文件,sort -u 排序去重,sort -m 合并子文件

详解:
拆分大文件:
split bigFile   -l 按行分割
-b 按大小分割 M K

所有的子文件排序:
sort -u subFileName > subFileName.tmp

合并所有的子文件:
sort -m allSubFileName.tmp -u > resultFileName

sort 参数:
-u  subFileName (unique 排序去重)
-m (merge 合并文件)
-o (output 输出到指定文件)

split 参数:
-a, --suffix-length=N   指定输出文件名的后缀,默认为2个
-b, --bytes=SIZE        指定输出文件的字节数,可跟K M
                                          eg split file -b 10k
-C, --line-bytes=SIZE  每一输出档中,单行的最大 byte 数
-d, --numeric-suffixes 使用数字代替字母做后缀
-l, --lines=NUMBER    指定输出文件的行数

注意:
1:“split:Output file suffixes exhausted”的解决方案:
分割文件时,默认的子文件是以两个字母组合的,当你要分割的大文件过大,即切割的子文件过多时,已经超过26*26个,就会提示以上错误。split在提示我们输出的文件名后缀被用光了。这时加上-a参数即可,表示用几个后缀,默认是2个。
split fileName -l $lines -a 3 "tempfile"
"tempfile"是切割后的子文件名的前缀。

没有评论:

发表评论