How to ignore characters and print only numbers using awk?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to ignore characters and print only numbers using awk?
# 8  
Old 05-28-2013
Quote:
Originally Posted by Yoda
@Jotne, that looks like a control character.

I didn't get it when I copied it to a file. By the way it can be removed using character class: [:cntrl:]
It's not a control character. It's e-acute and it's present in the OP's text.

Jotne's probably using a locale whose alpha class does not include that letter, e.g. the POSIX locale.

Further, while e-acute is a single byte in iso8859-1, in utf-8 it's multibyte.

Your approach could be made simpler and more robust by using the complement of the digit class.

Regards,
Alister

---------- Post updated at 05:35 PM ---------- Previous update was at 05:27 PM ----------

I see that I was beaten to it by 6 minutes. Obviously, I concur with jlliagre.

Regards,
Alister
This User Gave Thanks to alister For This Post:
# 9  
Old 05-29-2013
Quote:
Originally Posted by jlliagre
Here is a simpler way that isn't affected by the character set issue:
Code:
awk '{gsub("[^[:digit:]]+"," ");print $1,$2,$3}' file

Or use my solution in post #3
# 10  
Old 05-29-2013
Quote:
Originally Posted by Jotne
Or use my solution in post #3
Indeed, an astute way of using delimiters.

Here is the shortest awk based answer I can think of, using Yoda tricks:

Code:
awk '{gsub("[^0-9]+"," ");NF-=2}1' infile

# 11  
Old 05-30-2013
I like the tr solution.
But it needs \n to not fold the lines.
Retain the original number positions:
Code:
tr -c '[:digit:]\n' '[ *]' < file

Sqeeze the space to one:
Code:
tr -sc '[:digit:]\n' '[ *]' < file

BTW with sed these are
Code:
sed 's/[^[:digit:]]/ /g' file

Code:
sed 's/[^[:digit:]]\{1,\}/ /g' file

In \{n,m\} a missing m means "at least n".
In ERE this is {n,m} - but some awk do not have it implemented (and {1,} is the same as +).

Last edited by MadeInGermany; 05-30-2013 at 01:58 PM.. Reason: added a sed solution
This User Gave Thanks to MadeInGermany For This Post:
# 12  
Old 05-30-2013
Quote:
Originally Posted by MadeInGermany
I like the tr solution.
But it needs \n to not fold the lines.
Woops. Nice catch. Thank you for pointing it out.

Regards,
Alister
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Awk- Indexing a list of numbers in file2 to print certain rows in file1

Hi Does anyone know of an efficient way to index a column of data in file2 to print the coresponding row in file1 which corresponds to the data in file2 AND 30 rows preceding and after the row in file1. For example suppose you have a list of numbers in file2 (single column) as follows:... (6 Replies)
Discussion started by: Geneanalyst
6 Replies

2. Shell Programming and Scripting

awk to print column number while ignoring alpha characters

I have the following script that will print column 4 ("25") when column 1 contains "123". However, I need to ignore the alpha characters that are contained in the input file. If I were to ignore the characters my output would be column 3. What is the best way to print my column of interest... (3 Replies)
Discussion started by: ncwxpanther
3 Replies

3. Shell Programming and Scripting

awk print - fields separated with comma's need to ignore inbetween double quotes

I am trying to re-format a .csv file using awk. I have 6 fields in the .csv file. Some of the fields are enclosed in double quotes and contain comma's inside the quotes. awk is breaking this into multiple fields. Sample lines from the .csv file: Device Name,Personnel,Date,Solution... (1 Reply)
Discussion started by: jxrst
1 Replies

4. Shell Programming and Scripting

Help awk/sed: putting a space after numbers:to separate number and characters.

Hi Experts, How to sepearate the list digit with letters : with a space from where the letters begins, or other words from where the digits ended. file 52087mo(enbatl) 52049mo(enbatl) 52085mo(enbatl) 25051mo(enbatl) The output should be looks like: 52087 mo(enbatl) 52049... (10 Replies)
Discussion started by: rveri
10 Replies

5. Shell Programming and Scripting

Awk Print Only Continous Numbers

Hi, i need help to print only those numbers which occur next to each other from a file. Input: 1 2 3 9 44 45 46 77 79 80 81 Desired Output: (8 Replies)
Discussion started by: saint2006
8 Replies

6. Shell Programming and Scripting

iterate through list of numbers and print specific lines with awk

Could someone please point me in the right direction with the following? I have a program that generates logs that contains sections like this: IMAGE INPUT 81 0 0.995 2449470 0 1726 368 1 0.0635 0.3291 82 0 1.001 2448013 0 1666 365 1 0.0649 ... (4 Replies)
Discussion started by: euval
4 Replies

7. Shell Programming and Scripting

Use awk to print first 6 characters

Hi, i want to use awk to print the first 6 characters of a variable awk -F"|" '$3>0 { print $3 }' z00.unl > z001.unl but $3= 7 digits and i just want to print the first 6 digits. eg 1005779 but i want to print only 100577 (3 Replies)
Discussion started by: dealerso
3 Replies

8. Shell Programming and Scripting

awk print $1 escape all special characters

I'm using awk '{print $1}' and it works most of the time to print the contents of a mysql query loop, but occationally I get a field with some special character in it, is there a way to tell awk to ignore all special characters between my FS? I have >186K records, so building a list of ALL special... (6 Replies)
Discussion started by: unclecameron
6 Replies

9. Shell Programming and Scripting

Awk , Sed Print last 4 numeric characters

Hello All, I have been searching and trying this for a bit now. Can use some assistance. Large 5000 line flat file. bash, rhel5 Input File Sinppet: Fri Oct 30 09:24:02 EDT 2009 -- 1030 Fri Oct 30 09:26:01 EDT 2009 -- 73 Fri Oct 30 09:28:01 EDT 2009 -- 1220 Fri Oct 30 09:30:01 EDT... (9 Replies)
Discussion started by: abacus
9 Replies

10. UNIX for Dummies Questions & Answers

How to ignore characters and print only number using unix?

say D45H E67H G779K F8888U T66Y Y333U output shud be like 45 67 779 8888 66 333 (5 Replies)
Discussion started by: cdfd123
5 Replies
Login or Register to Ask a Question