我有一个相当大的文件(1.5 亿行 10 个字符)。我需要将它拆分为 200 万行的 150 个文件,每个输出行或者是源行的前 5 个字符或最后 5 个字符。我可以在 Perl 中相当快地做到这一点,但我想知道是否有使用 bash 的简单解决方案。有任何想法吗?
Sklivvz
问问题
3659 次
3 回答
3
在家工作?:-)
我认为带有 sed (将每行分成两行)和 split (将内容分成多个文件)的简单管道就足够了。
man 命令是你的朋友。
确认不是作业后补充:
怎么样
sed 's/\(.....\)\(.....\)/\1\n\2/' input_file | split -l 2000000 - out-prefix-
?
于 2008-09-15T15:28:24.773 回答
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 更简单或更高效。
于 2008-09-15T15:31:31.927 回答
0
每行变体的前五个字符,假设大文件名为 x.txt,并假设可以在当前目录中创建名称为 x.txt.* 的文件:
split -l 2000000 x.txt x.txt.out && (用于 x.txt.out* 中的拆分文件;do outfile="${splitfile}.firstfive"; echo "$splitfile -> $outfile"; cut -c 1 -5 "$splitfile" > "$outfile"; 完成)
于 2008-09-15T15:35:48.080 回答