use*_*394 26 command-line shell text-processing
我正在编写一个 PHP 脚本来解析一个大型文本文件,以便从中插入数据库。但是在我的主机上,文件太大,我达到了 PHP 的内存限制。
该文件大约有 16,000 行;我想把它分成四个单独的文件(一开始),看看我是否可以加载它们。
我可以得到的第一部分head -4000 file.txt。中间部分稍微有点棘手——我正在考虑将tail输出输送到head( tail -4001 file.txt | head -4000 > section2.txt),但还有另一种/更好的方法吗?
实际上我的逻辑很混乱——对于第二部分,我需要像tail -12001 file.txt | head - 4000,然后降低下一部分的tail论点。我已经混了!:P
roz*_*acz 36
如果您不想搞砸,但仍要使用tailand 进行操作head,则有一种tail从头而不是末尾使用行数进行调用的有用方法:
tail -n +4001 yourfile | head -4000
Run Code Online (Sandbox Code Playgroud)
......但是一个更好的,专门用于分割文件的自动工具被称为...... split!它也是 GNU coreutils 的一部分,所以任何普通的 Linux 系统都应该拥有它。使用方法如下:
split -l 4000 yourInputFile thePrefixForOutputFiles
Run Code Online (Sandbox Code Playgroud)
(man split如有疑问,请查看。)
Sor*_*gal 26
像你一样结合头部和尾部会起作用,但为此我会使用 sed
sed -n '1,4000p' input_file # print lines 1-4000 of input_file
Run Code Online (Sandbox Code Playgroud)
这使您可以使用快速的 shell 函数解决问题
chunk_it(){
step=4
start=1
end=$step
for n in {1..4} ; do
sed -n "${start},${end}p" "$1" > "$1".$start-$end
let start+=$step
let end+=$step
done
}
chunk_it your_file
Run Code Online (Sandbox Code Playgroud)
现在你有 your_file.1-4000 和 yuor_file.4001-8000 等等。
注意:需要 bash