2008-09-15 19 views
1

我有一个相当大的文件(1.5亿行10个字符)。我需要将它分成两百万行150个文件,每个输出行可以是源行的前5个字符或后5个字符。 我可以在Perl中快速执行此操作,但我想知道是否有使用bash的简单解决方案。 任何想法?在Linux/bash下分割一个文件和它的行

+0

我认为你需要更清楚一点转换是什么。 (也就是说,我不明白。)也许是一个小例子? – mweerden 2008-09-15 15:25:30

回答

3

作业? :-)

我会认为一个简单的sed管道(将每行分成两行)和split(将事物分成多个文件)就足够了。

男人的命令是你的朋友。


确认后补充说,这不是功课:

如何

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

+0

不是作业,只是测试网站。感谢您的回答。 – Sklivvz 2008-09-15 15:33:08

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更有效,虽然。

0

每一行变种的前5个字符,假设大文件称为x.txt,并假设它的确定与名称x.txt当前目录下创建文件*:

分裂-l 2000000 X .txt x.txt.out & &(for splitfile in x.txt.out *; do outfile =“$ {splitfile} .firstfive”; echo“$ splitfile - > $ outfile”; cut -c 1-5“$分裂文件“>”$ outfile“;完成)

相关问题