![将大txt文件分割成某些小文件](https://linux22.com/image/27502/%E5%B0%86%E5%A4%A7txt%E6%96%87%E4%BB%B6%E5%88%86%E5%89%B2%E6%88%90%E6%9F%90%E4%BA%9B%E5%B0%8F%E6%96%87%E4%BB%B6.png)
我有一个 txt 文件,格式为 250,000 * 3600(3600 行和 250,000 列),我将把它分成 3600 个小 txt,每个文件为 250,000 * 1。
我理解分割基本上可以将大文件分割成具有一定大小的小文件。如果我采用相同的技术,我将获得相同大小的文件,但每个文件可以是 249,999 * 1 或 250,001 *1。
谁可以帮我这个事?
答案1
我建议写一个小脚本:
NR_LINES=$(wc -l your-file | awk '{ print $1 }')
for line in {1..$NR_LINES}; do
head -n $line your-file | tail -n 1 > your-file.part$line
done
这会将文件的行数保存在变量中NR_LINES
。也许您的文件包含的行数比您感兴趣的行数多。在这种情况下,您应该自己设置变量。该脚本从 1 迭代到文件中的最后一行。对于每次运行,它都会打印第一个n行 ( $line
)。这通过管道传输到tail
,它仅打印最后一行并将结果保存在文件中。
答案2
您可以csplit
通过使用模式/^/
匹配行开头来分割成每一行。参数{*}
重复该模式直到输入结束。
csplit --elide-empty-files input.txt '/^/' '{*}'
如果没有--elide-empty-files
(或-z
),索引为 0 的文件将为空。