[英]Sed operations only works with smaller files
操作系統:Ubuntu 14.04
我有12個大型json文件(每個2-4 GB),我想對其執行不同的操作。 我要刪除第一行,找到“}”,然后將其替換為“}”,然后刪除所有“]”。
我正在使用sed進行操作,我的命令是:
sed -i.bak -e '1d' -e 's/},/}/g' -e '/]/d' file.json
當我在一個小文件(12.7kb)上運行命令時,它可以正常工作。 file.json包含具有更改的內容,而file.json.bak包含原始內容。
但是,當我在較大的文件上運行命令時,原始文件將被清空,例如file.json為空,而file.json.bak包含原始內容。 運行時間也是我認為“快”的時間,大約2-3秒。
我在這里做錯了什么?
您確定輸入文件包含換行符,而換行符被您在其上運行命令的平台所識別? 如果沒有,則刪除一行將刪除整個文件。 wc -l < file
告訴您什么?
如果不是這樣,那么您可能沒有足夠的文件空間來復制文件,因此sed在內部進行了類似的操作
mv file backup && sed '...' backup > file
但在將原始文件移至備份后沒有空間來創建新文件。 檢查可用的文件空間,如果您沒有足夠的空間並且無法獲得更多空間,則需要執行以下操作:
while [ -s oldfile ]
do
copy first N bytes of oldfile into tmpfile &&
remove first N bytes from oldfile using real inplace editing &&
sed 'script' tmpfile >> newfile &&
rm -f tmpfile
done
mv newfile oldfile
有關如何從文件中刪除前N個字節的信息,請參見https://stackoverflow.com/a/17331179/1745001 。 選擇適合您的可用空間的N的最大值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.