Reputation: 89
Trying to search/below numbers in below in KB unit (Cover KB: 7606353,) so it will be displayed as (Cover GB: 7.25,) I have tried many awk options to change below numbers from KB unit to GB and other complicated tools that I use to send outputs to files then to use again, my target is to have like a single awk so it find the number after (Cover KB: ) and divide it by /1024/1024 and change KB to GB .. the maximum effort i reached was
awk '($NF == ($NF+0)){printf("%s %6.2f\n",$0,$10/1024/1024)}END{print ""}'
but that will display the number i need at the end of the line while i needed to replace it..Tried -F to cut some columns and didn't get the needed output as well.
Source:
XX YY ZZ checknpr Y checkagain DEV Cover KB: 7606353, TARGET GB: 1048576
XX YY ZZ checknpr Y checkagain DEV Cover KB: 7268433, TARGET GB: 1048576
XX YY ZZ checknpr Y checkagain DEV Cover KB: 6895144, TARGET GB: 1048576
XX YY ZZ checknpr Y checkagain DEV Cover KB: 6506311, TARGET GB: 1048576
XX YY ZZ checknpr Y checkagain DEV Cover KB: 5590773, TARGET GB: 1048576
XX YY ZZ checknpr Y checkagain DEV Cover KB: 5192929, TARGET GB: 1048576
XX YY ZZ checknpr Y checkagain DEV Cover KB: 4645949, TARGET GB: 1048576
Change to:
XX YY ZZ checknpr Y checkagain DEV Cover GB: 7.25, TARGET GB: 1048576
XX YY ZZ checknpr Y checkagain DEV Cover GB: 6.93, TARGET GB: 1048576
XX YY ZZ checknpr Y checkagain DEV Cover GB: 6.58, TARGET GB: 1048576
XX YY ZZ checknpr Y checkagain DEV Cover GB: 6.20, TARGET GB: 1048576
XX YY ZZ checknpr Y checkagain DEV Cover GB: 5.33, TARGET GB: 1048576
XX YY ZZ checknpr Y checkagain DEV Cover GB: 4.95, TARGET GB: 1048576
XX YY ZZ checknpr Y checkagain DEV Cover GB: 4.43, TARGET GB: 1048576
Upvotes: 2
Views: 46
Reputation: 19088
This awk
works without knowing the field number of the condition
$ awk '{ for(i=1;i<=NF;i++){ if($i~/^KB:/){ $i="GB:";
$(i+1)=sprintf("%.2f,",$(i+1)/1024^2) } } }1' file
XX YY ZZ checknpr Y checkagain DEV Cover GB: 7.25, TARGET GB: 1048576
XX YY ZZ checknpr Y checkagain DEV Cover GB: 6.93, TARGET GB: 1048576
XX YY ZZ checknpr Y checkagain DEV Cover GB: 6.58, TARGET GB: 1048576
XX YY ZZ checknpr Y checkagain DEV Cover GB: 6.20, TARGET GB: 1048576
XX YY ZZ checknpr Y checkagain DEV Cover GB: 5.33, TARGET GB: 1048576
XX YY ZZ checknpr Y checkagain DEV Cover GB: 4.95, TARGET GB: 1048576
XX YY ZZ checknpr Y checkagain DEV Cover GB: 4.43, TARGET GB: 1048576
Upvotes: 2
Reputation: 88654
I suggest:
awk '{$9=$12; $10=sprintf("%.2f,", $10/$13)} {print}' file
Output:
XX YY ZZ checknpr Y checkagain DEV Cover GB: 7.25, TARGET GB: 1048576 XX YY ZZ checknpr Y checkagain DEV Cover GB: 6.93, TARGET GB: 1048576 XX YY ZZ checknpr Y checkagain DEV Cover GB: 6.58, TARGET GB: 1048576 XX YY ZZ checknpr Y checkagain DEV Cover GB: 6.20, TARGET GB: 1048576 XX YY ZZ checknpr Y checkagain DEV Cover GB: 5.33, TARGET GB: 1048576 XX YY ZZ checknpr Y checkagain DEV Cover GB: 4.95, TARGET GB: 1048576 XX YY ZZ checknpr Y checkagain DEV Cover GB: 4.43, TARGET GB: 1048576
Upvotes: 2