操作系统: Ubuntu 14.04
我有12个大的json文件(每个文件2-4GB),我想对它们执行不同的操作。我希望删除第一行,查找"}“,并将其替换为"}”并删除所有"]“。
我使用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秒。
我在这里做错什么了?
发布于 2016-03-07 14:02:29
您确定输入文件包含由运行命令的平台识别的换行符吗?如果没有,那么删除一行将删除整个文件。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的最大值。
https://stackoverflow.com/questions/35843515
复制相似问题