我有这个1,000,000+行的大文件,其中包含一些内存数据。对于某种用途,我需要将g转换为mb,例如:
DateAndTime#15/03/15 07:57:07
**********************
top - 07:57:27 up 2 days, 15:28, 18 users, load average: 4.65, 3.15, 2.11
Tasks: 774 total, 2 running, 771 sleeping, 0 stopped, 1 zombie
%Cpu(s): 12.8 us, 2.5 sy, 0.0 ni, 83.5 id, 1.2 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem: 16327128 total, 16119192 used, 207936 free, 177868 buffers
KiB Swap: 36060156 total, 78552 used, 35981604 free. 6570548 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
26636 fpd 20 0 9987.4m 6.307g 47728 S 0.0 40.5 192:07.10 AppExe
29019 fpd 20 0 1752832 785848 45652 S 77.0 4.8 17:32.74 python
到:
26636 fpd 20 0 9987.4m 6307m 47728 S 0.0 40.5 192:07.10 AppExe
问题在于该文件构建在一个不方便使用的结构中,需要首先找到x.xxxG,然后才将其替换,因此要花费大量时间(通过readline),其余文件也应保留相同。
以下在Linux和OSX / BSD系统上有效:
sed -E 's/(^| )([0-9]).([0-9]{3})g( |$)/\1\2\3m\4/g' infile > outfile
它做出了一些假设:
d.dddg
(其中d
有一个十进制数字)都应替换(单行中甚至可能多次出现-删除g
最后一个之后的内容/
以每行最多替换一个)相比之下,如果需要执行实际计算,那么awk
您是您的朋友。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句