Removing trailing zeroes


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Removing trailing zeroes
# 1  
Old 02-25-2010
Removing trailing zeroes

So, I can't figure out how to do a previous question with printf, so I'm taking a different approach. Suppose I have a set of numbers:

Code:
1200,135.000000,12.30100,3212.3200,1.759403,,1230,101.101010,100.000000

I want to remove all trailing zeroes after the decimal, and, if it ends up orphaned, the decimal itself. That last bit's not so important; if just the trailing zeroes can be removed, I'm certain I can kill off orphaned decimals. My various attempts are, at best, weak partial solutions. I can remove trailing zeroes and a few other tricks, but all fall short. The only guarantees about the incoming data are 1) the first field will always be a positive integer and no field will have more than 6 digits after the decimal.

So, how in the world can I remove from each field (except the first, to which this need not apply) any trailing zeroes after the decimal? For what it's worth, after digging through the forum, I've found no working solutions. A method (gsub? looping gsub? idunno...) that works would give as output for the above line:

Code:
1200,135,12.301,3212.32,1.759403,,1230,101.101010,100

# 2  
Old 02-25-2010
Code:
$ echo 1200,135.000000,12.30100,3212.3200,1.759403,,1230,101.101010,100.000000 | sed "s/\.0\{1,\}//g"
1200,135,12.30100,3212.3200,1.759403,,1230,101.101010,100

# 3  
Old 02-25-2010
Quote:
Originally Posted by anbu23
Code:
$ echo 1200,135.000000,12.30100,3212.3200,1.759403,,1230,101.101010,100.000000 | sed "s/\.0\{1,\}//g"
1200,135,12.30100,3212.3200,1.759403,,1230,101.101010,100

If at all possible, I'd like to do this within an awk script, although I don't object to a system call in a pinch. Also, when I run your solution, I get:

Code:
# echo 1200,135.000000,12.30100,3212.3200,1.759403,1230,101.101010,100.000000 | sed "s/\.0\{1,\}//g"
1200,135,12.30100,3212.3200,1.759403,1230,101.101010,100

instead of:

Code:
1200,135,12.301,3212.32,1.759403,1230,101.101010,100

Do you get the same on your system, or does it work there?

FWIW, the most promising (but still failed...) solution I can think of is to put a trailing comma on $0, and then apply up to 5 times something like:

gsub("0,",",",$0)

Unfortunately, that only works if there's a way to apply it only to those fields which contain a decimal point. The fact that this is a gsub applying to $0 makes that difficult, and the solution as written would turn, for example, 1200 into 120, then into 12 on a second application.
# 4  
Old 02-25-2010
Code:
 cat abc.txt
1200
135.000000
12.30100
3212.3200
1.759403
1230
101.101010
100.000000

awk '{ if ($0 ~ /\./){ sub("0*$","",$0); sub ("\.$","",$0);} print}' abc.txt

1200
135
12.301
3212.32
1.759403
1230
101.10101
100

HTH,
PL
# 5  
Old 02-25-2010
Code:
$ echo 1200,135.000000,12.30100,3212.3200,1.759403,1230,101.101010,100.000000 | awk -F"," -v OFS="," ' { for(i=0;NF-i++;){sub("[.]*0+ *$","",$i)};$1=$1 }1 '
12,135,12.301,3212.32,1.759403,123,101.10101,100



---------- Post updated at 10:51 PM ---------- Previous update was at 10:45 PM ----------

My sed and datpal's awk solution fail in this case

Code:
$ echo 1200.00200300 | sed "s/\.0\{1,\}//g"
1200200300
$ echo 1200.00200300 | awk '{ if ($0 ~ /\./){ sub("0*$","",$0); sub ("\.$","",$0);} print}'
1200.00200

Code:
$ echo 1200.00200300 | awk -F"," -v OFS="," ' { for(i=0;NF- i++;){sub("[.]*0+ *$","",$i)};$1=$1 }1 '
1200.002003

# 6  
Old 02-26-2010
Quote:
Originally Posted by anbu23
[CODE]$
---------- Post updated at 10:51 PM ---------- Previous update was at 10:45 PM ----------

[/COLOR]My sed and datpal's awk solution fail in this case

Code:
$ echo 1200.00200300 | sed "s/\.0\{1,\}//g"
1200200300
$ echo 1200.00200300 | awk '{ if ($0 ~ /\./){ sub("0*$","",$0); sub ("\.$","",$0);} print}'
1200.00200

Code:
$ echo 1200.00200300 | awk -F"," -v OFS="," ' { for(i=0;NF- i++;){sub("[.]*0+ *$","",$i)};$1=$1 }1 '
1200.002003


It works fine for me anbu23
Code:
 echo 1200.00200300 | awk '{ if ($0 ~ /\./){ sub("0*$","",$0); sub ("\.$","",$0);} print}'
1200.002003

In fact what u gave will break for whole numbers
Code:
 echo 100 | awk -F"," -v OFS="," ' { for(i=0;NF- i++;){sub("[.]*0+ *$","",$i)};$1=$1 }1 '
1

# 7  
Old 02-26-2010
Quote:
Originally Posted by daptal
It works fine for me anbu23
Code:
 echo 1200.00200300 | awk '{ if ($0 ~ /\./){ sub("0*$","",$0); sub ("\.$","",$0);} print}'
1200.002003

In fact what u gave will break for whole numbers
Code:
 echo 100 | awk -F"," -v OFS="," ' { for(i=0;NF- i++;){sub("[.]*0+ *$","",$i)};$1=$1 }1 '
1

I added a slash and it worked for me
Code:
$ echo 1200.00200300 | awk '{ if ($0 ~ /\./){ sub("0*$","",$0); sub ("\\.$","",$0);} print}'
1200.002003

You are right. My code will break for whole numbers. Here is the fixed code

Code:
echo 1200,135.000000,12.30100,3212.3200,1.759403,1230,101.101010,100.000000 | awk -F"," -v OFS="," ' { for(i=0;NF-i++;){ if($i ~ /[.]/){ sub("[.]*0+ *$","",$i) }}$1=$1}1'
1200,135,12.301,3212.32,1.759403,1230,101.10101,100

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Removing Trailing Line

I have been trying to remove empty lines and lines just filled with spaces. I have used the following command which does work. sed -i "/^\s*$/d" Except it leaves one single trailing line at the very end of the file. For the life of me I cant figure out why I cant remove that last trailing... (2 Replies)
Discussion started by: user8282892
2 Replies

2. UNIX for Dummies Questions & Answers

Removing trailing x'0A' characters.

I am trying to remove trailing carriage return (x'0a') from a source program. What is a good way to do this for the whole file? TIA (4 Replies)
Discussion started by: wbport
4 Replies

3. UNIX for Dummies Questions & Answers

Removing trailing characters

I have been given a shell script that I need to amend. To do the following extract the filename from the flag file by removing the .flag extension. # Local variables # Find if the flag files exists MASK=coda_mil2*.flag # Are there any files? bookmark="40" fileFound=0 ls -1... (3 Replies)
Discussion started by: andymay
3 Replies

4. Shell Programming and Scripting

Removing just the trailing commas :-(

Hi all, I haven't needed to do any shell based editing for nearly 20 years, and no amount of searching around has found me a solution to this very simple problem :-( I have a csv file. Some lines have three commas at the end. This means the invoice hasn't been paid. I'd like to use sed / grep... (4 Replies)
Discussion started by: chardyzulu
4 Replies

5. UNIX for Dummies Questions & Answers

Removing the trailing date from a filename

Hi I have 3 files (say) in a folder as in the example below abc_01012011.csv def_01012011.csv xyz_01012011.csv I need to move these files to a different folder as follows abc.csv def.csv xyz.csv I am trying to put together a script with a for loop which reads the source filenames... (5 Replies)
Discussion started by: bobsn
5 Replies

6. Shell Programming and Scripting

Removing trailing zeros using sed

Hello All, I have a csv file with 3 columns. The file which looks like this 47850000,100,233 23560000,10000,456 78650000,560000,54 34000000,3456,3 The first column has 4 trailing zeros. I have to remove 4 trailing zeroes from 1st field. The output file should appear as follows. ... (12 Replies)
Discussion started by: grajp002
12 Replies

7. Shell Programming and Scripting

sed not removing leading zeroes

I have th following file 0000000011 0000000001 0000000231 0000000001 0000000022 noow when i run the following command sed 's/^0+//g' file name I receive the same output and the leading zeroes are not removed from the file . Please let me know how to achieve... (4 Replies)
Discussion started by: asalman.qazi
4 Replies

8. Shell Programming and Scripting

Removing leading and trailing spaces only in PERL

Hi All, I have a file with the following contents with multiple lines 172445957| 000005911|8| 400 Peninsula Ave.#1551 | And,K |935172445957|000005911 607573888 |000098536 | 2|Ane, B |J |Ane |1868 |19861206|20090106|20071001 I want to trim the "leading and trailing spaces only" from... (2 Replies)
Discussion started by: kumar04
2 Replies

9. Shell Programming and Scripting

sed: removing any and all trailing digits?

We have a large number of oracle database related scripts that utilize the environment variables $ORACLE_SID and $DBNAME. In a single instance database the $ORACLE_SID is the same as the database name $DBNAME. So we have simply set DBNAME = $ORACLE_SID. However, now that we are clustering with RAC,... (5 Replies)
Discussion started by: Squeakygoose
5 Replies

10. Shell Programming and Scripting

re: removing trailing space from lines

Not sure why this thread was closed without any explanation, but you can do what you're asking with sed 's/]*$//g' < sourceFile > destFile (1 Reply)
Discussion started by: oombera
1 Replies
Login or Register to Ask a Question