Shell

如何使用 awk,sed 修改文本?

  • January 21, 2016

如下,部分文字

16G    16G    1.9G    40G
4G     4G     952M    60G
16G    16G    1.6G    40G
5G     780M   5G      80G

我想將所有單位從“M”更改為“G”,就像這樣

16G    16G    1.9G    40G
4G     4G     0.92G   60G
16G    16G    1.6G    40G
5G     0.76G  5G      80G

我可以用python來做,但是不知道用shell怎麼實現?awk,sed,perl… 可以嗎?

root@lab7-dl380-11:~/> cat test
16G 754G 457M
346M 77G 654M

root@lab7-dl380-11:~/>  awk '{for(i=1;i<=NF;i++)if($i ~ /M/)printf $i/1024 "G\t"; else printf $i "\t"; print ""}' test
16G     754G    0.446289G
0.337891G       77G     0.638672G

您也可以舍入到百分之一以獲得更智能的輸出

root@lab7-dl380-11:~/>  awk '{for(i=1;i<=NF;i++)if($i ~ /M/)printf int($i/1024*100)/100 "G\t"; else printf $i "\t"; print ""}' test
16G     754G    0.44G
0.33G   77G     0.63G

引用自:https://serverfault.com/questions/750685