在Linux / bash下拆分文件及其行

时间:2008-09-15 15:19:30

标签: linux bash large-files filesplitting

我有一个相当大的文件(1.5亿行10个字符)。我需要将它分成150个200万行的文件,每个输出行可选地是源行的前5个字符或最后5个字符。 我可以很快地在Perl中做到这一点,但我想知道是否有一个使用bash的简单解决方案。 有什么想法吗?

3 个答案:

答案 0 :(得分:3)

作业? : - )

我认为使用sed(将每行拆分为两个)和拆分(将内容拆分为多个文件)的简单管道就足够了。

man命令是你的朋友。


确认不是作业后添加:

怎么样

sed 's/\(.....\)\(.....\)/\1\n\2/' input_file | split -l 2000000 - out-prefix-

答案 1 :(得分:0)

我认为这样的事情可行:

out_file=1
out_pairs=0
cat $in_file | while read line; do
    if [ $out_pairs -gt 1000000 ]; then
        out_file=$(($out_file + 1))
        out_pairs=0
    fi
    echo "${line%?????}" >> out${out_file}
    echo "${line#?????}" >> out${out_file}
    out_pairs=$(($out_pairs + 1))
done

不确定它是否比使用Perl更简单或更有效。

答案 2 :(得分:0)

每个行变量的前五个字符,假设大文件名为x.txt,并假设可以在当前目录中创建名为x.txt的文件。*:

split -l 2000000 x.txt x.txt.out&& (对于x.txt.out中的splitfile *; do outfile =“$ {splitfile} .firstfive”; echo“$ splitfile - > $ outfile”; cut -c 1-5“$ splitfile”>“$ outfile” ;完成)