Round values only when it's numerics


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Round values only when it's numerics
# 1  
Old 01-30-2018
Ubuntu Round values only when it's numerics

Hi, all

I have a field in a file looks like this(hundreds of lines):

Code:
inf
1.24101
-0.185947
-0.349179
inf
0.126597
0.240142
-0.12031

And what I expect is:
Code:
inf
1.241
-0.186
-0.349
inf
0.127
0.240
-0.120

I am trying to use awk, but I don't have much experience to figure out the problems.
Code:
cat file |awk '{if($1==[:digit:]){print $1} else if ($1== [:alpha:]){printf"%.3f\n", $1}' |head

# 2  
Old 01-30-2018
Try using character class [:alnum:] - Alphanumeric characters:-
Code:
awk '!/[:alnum:]/{$1=sprintf("%.3f",$1)}1' file

This User Gave Thanks to Yoda For This Post:
# 3  
Old 01-30-2018
How about
Code:
awk '!/[^0-9-.]/ {$1 = $1+0} {print "" $1} ' CONVFMT="%.3f" file
inf
1.241
-0.186
-0.349
inf
0.127
0.240
-0.120

This User Gave Thanks to RudiC For This Post:
# 4  
Old 01-30-2018
Hello nengcheng,

Following awk may also help you in same.

Code:
awk '$0 !~ /[a-zA-Z]+/{printf("%.03f\n",$0);next} 1'  Input_file

Thanks,
R. Singh
This User Gave Thanks to RavinderSingh13 For This Post:
# 5  
Old 01-30-2018
Thank you all, Yoda and RavinderSingh13' s code works for me.

---------- Post updated at 01:42 PM ---------- Previous update was at 01:32 PM ----------

Quote:
Originally Posted by Yoda
Try using character class [:alnum:] - Alphanumeric characters:-
Code:
awk '!/[:alnum:]/{$1=sprintf("%.3f",$1)}1' file

Thank you, Yoda, this works great. Besides, what does the character 's' mean in this code?
This User Gave Thanks to nengcheng For This Post:
# 6  
Old 01-30-2018
sprintf is an awk string function. For further reference check: String Functions
Code:
sprintf(format, expression1, …)
Return (without printing) the string that printf would have printed out with the same arguments

So I am using this function to format and then assign the result instead of printing.
This User Gave Thanks to Yoda For This Post:
# 7  
Old 01-30-2018
Quote:
Originally Posted by Yoda
sprintf is an awk string function. For further reference check: String Functions
Code:
sprintf(format, expression1, ...)
Return (without printing) the string that printf would have printed out with the same arguments

So I am using this function to format and then assign the result instead of printing.
Great, that's an elegant solution.
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Grepping non-alpa-numerics from first column only

I have data in the following tab-separated format (consists of 200 columns all together, this is just a sampling) </s> 0.001701 0.002025 0.002264 0.001430 -0.001300 . -0.205240 0.177341 -0.426209 -0.661049 -0.048884 0.027032 the -0.159145 0.084377 0.056968 0.050934 0.160689 of -0.230698... (7 Replies)
Discussion started by: owwow14
7 Replies

2. Shell Programming and Scripting

How to extract 4th field if numerics?

I have a file which contains fields comma separated & with each field surrounded by quotes. The 4th field contains either a serial number, the text ABC, the text XYZ or it's blank. I want to only extract records which have a serial number. Here's some sample data: > cat myfile... (4 Replies)
Discussion started by: CHoggarth
4 Replies

3. Shell Programming and Scripting

Round up the decimals

Hi All, I would like to do the following in the shell script 561.76 to 562 I tried using this echo 'scale=0; 749 * 75 /100 ' | bc but just returned only 561 Please help me . I appreciate your help Thanks rajeevm (13 Replies)
Discussion started by: rajeevm
13 Replies

4. Shell Programming and Scripting

round decimal values and use in loops

i have a file in which 3 values are stored like --4.72 4.42 3.86 what i wanna do is that take read each value and compare with a fixed value say 5 but cant do so as i am getting an error for the same. please check the code cat /home/nsadm/auto/Logging/uptime.txt| while read a b c do if... (2 Replies)
Discussion started by: gemnian.g
2 Replies

5. Shell Programming and Scripting

Drop records with non-numerics in field X

I have tab delimited file and need to remove all records prior to sort, that have non-numerics in the Field 2. valid/invalid field 2 data examples are: " 123" valid "1 23" invalid " NOPE" invalid I've tried this awk it does not recognize tab as the delimiter or check... (3 Replies)
Discussion started by: akxeman
3 Replies

6. Shell Programming and Scripting

round a number

In a shell script - How do I round a decimal number (contained in a variable) to the nearest whole number? (2 Replies)
Discussion started by: achieve
2 Replies

7. Shell Programming and Scripting

round in KSH

Is there an easy way to round a number up in Korn shell? ie. 10.4 --> 11 Thanks. (6 Replies)
Discussion started by: here2learn
6 Replies

8. UNIX for Dummies Questions & Answers

how to round a value

Hello, In a unix shell script,i want to round a variabele to a nearest number Ex: set count=104.4 How can i round that to 105.? Thanks, Sateesh (2 Replies)
Discussion started by: kotasateesh
2 Replies

9. Shell Programming and Scripting

Conversion to display leading zeros for numerics

I have the following script (which works fine), escept I don't know how to make the MONTH and DAY show up with leading zeros. I have a statement (not in this script) which will show this in a YYYYMMDD format, but the script makes the MONTH and DAY fields show single digits. For today, as an... (4 Replies)
Discussion started by: dsimpg1
4 Replies
Login or Register to Ask a Question