当前位置:首页> 正文

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

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

Splitting a file and its lines under Linux/bash

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


家庭作业? :-)

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

man 命令是你的朋友。

确认不是作业后补充:

怎么样

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

?


n


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

拆分 -l 2000000 x.txt x.txt.out


我认为这样的事情可以工作:

1
2
3
4
5
6
7
8
9
10
11
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 更简单或更高效。


展开全文阅读

相关内容