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

时间:2020-03-05 18:53:42  来源:igfitidea点击:

我有一个相当大的文件(1.5亿行10个字符)。我需要将其拆分为150个文件,包含200万行,每个输出行都可以替代为源行的前5个字符或者后5个字符。
我可以很快地在Perl中做到这一点,但是我想知道是否有使用bash的简单解决方案。
有任何想法吗?

解决方案

回答

在家工作? :-)

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

man命令是朋友。

确认不是作业后添加:

怎么样

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

回答

我认为类似这样的方法可能会起作用:

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更简单或者更有效。

回答

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

split -l 2000000 x.txt x.txt.out &&(用于x.txt.out *中的splitfile;执行outfile =" $ {splitfile} .firstfive";回显" $ splitfile-> $ outfile"; cut -c 1 -5" $ splitfile">" $ outfile";完成)