Shell
提取文本文件的中間部分?
我正在編寫一個 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
如果你不想搞砸但仍然使用
tail
andhead
,有一種有用的方法是tail
從頭開始使用行數呼叫,而不是結束:tail -n +4001 yourfile | head -4000
…但是,一個更好的、自動的工具被稱為……
split
!它也是 GNU coreutils 的一部分,所以任何普通的 Linux 系統都應該有它。以下是您可以使用它的方法:split -l 4000 yourInputFile thePrefixForOutputFiles
(看看
man split
是否有疑問。)
像你一樣結合頭部和尾部會起作用,但為此我會使用
sed
sed -n '1,4000p' input_file # print lines 1-4000 of input_file
這使您可以使用快速的 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
現在你有了 your_file.1-4000 和 yuor_file.4001-8000 等等。
注意:需要 bash