我有这个大文件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),其余部分也是如此。文件应该保持不变。
答案 0 :(得分:1)
以下适用于Linux和OSX / BSD系统:
sed -E 's/(^| )([0-9]).([0-9]{3})g( |$)/\1\2\3m\4/g' infile > outfile
它做出了某些假设:
d.dddg
形式的任何字段(其中d
是十进制数字)应该被替换(甚至可能在一行上多次出现 - 删除g
之后的/
awk
1}}每行最多替换一个 相反,如果需要执行实际计算,{{1}}是您的朋友。