shell awk文本中数值运算后,转存后内容格式与原来不一样了

有文件2.txt,定义变量c2="/home/2.txt",c6="/home/6.txt"
文件2.txt内容如下
2306 root 15 0 26292 15m 232 S 0.0 0.8 0:00.01 /usr/sbin/restoreco
2315 root 15 0 5908 624 500 S 0.0 0.0 0:00.10 syslogd -m 0
2318 root 15 0 3804 440 352 S 0.0 0.0 0:00.00 klogd -x
2333 root 16 0 631m 70m 26m S 0.0 3.5 3:45.81 /usr/lib64/firefox-
2339 rpc 18 0 8052 652 524 S 0.0 0.0 0:00.00 portmap
2365 root 12 -5 0 0 0 S 0.0 0.0 0:00.00 [rpciod/0]
2366 root 12 -5 0 0 0 S 0.0 0.0 0:00.00 [rpciod/1]
想做5、6、9、10列相加,但5、6列数值单位不同,顾用

s2=`cat $c2|sed -n '8,$ p'|awk '$5 ~ /.*[M|m]/{$5 = $5*1024}$6 ~ /.*[M|m]/{$6 = $5*1024}$5 ~ /.*[G|g]/{$5 = $5*1024*1024}$6 ~ /.*[G|g]/{$6 = $5*1024*1024}{$2=null;print }'`
进行单位转换,在用
echo $s2 >> $c6
将运算结果转存到6.txt
但转存后文件格式变了,变成都在一行显示了,类似
1 15 0 10348 680 576 S 0.0 0.0 0:00.71 init [5] 2 RT -5 0 0 0 S 0.0 0.0 0:00.00 [migration/0] 3 34 19 0 0 0 S 0.0 0.0 0:这样
这样的话,想在下一步进行同列数值相加的运算就无法进行了
想问怎么样才能在进程上面的单位转换运算后,转存到6.txt时能够保留源文件2.txt中格式?
或者有什么更好的办法实现同列中数据单位不同时求和?
谢谢!

不要将结果暂存入s2, 直接重定向到 c6即可。

cat $c2|sed -n '8,$ p'|awk '$5 ~ /.*[M|m]/{$5 = $5*1024}$6 ~ /.*[M|m]/{$6 = $5*1024}$5 ~ /.*[G|g]/{$5 = $5*1024*1024}$6 ~ /.*[G|g]/{$6 = $5*1024*1024}{$2=null;print }' > $c6
温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜