Visit Our UNIX and Linux User Community


How to convert a column to last five digits


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to convert a column to last five digits
# 1  
Old 09-29-2009
How to convert a column to last five digits

Hi

Suppose I have a input.csv file like this

Fort, 2034440-3333
Honda, b293489289
Toyota, 23423000


How to convert the second column to the following format, there are only two cases:
a.if the last five character is a hyphen plus four numeric digit, keep the the last five digits before the hypen as well as everything after hyphen (including hyphen).
b. if the last five character doesn't contain a hyphen, keep the last five digits.

so the output.csv is:

Fort, 34440-3333
Honda, 89289
Toyota, 23000

Thanks, I guess this will be done in awk but I have no idea how to do it.
# 2  
Old 09-29-2009
Code:
$ 
$ cat f1
Fort, 2034440-3333
Honda, b293489289
Toyota, 23423000
$ 
$ perl -lne '/^(.*?, )(.*?)((\d|-)\d{4})$/ && print $1,substr($3,0,1) eq "-" ? substr($2,-5):"",$3' f1
Fort, 34440-3333
Honda, 89289
Toyota, 23000
$ 
$

tyler_durden
# 3  
Old 09-29-2009
Code:
 
sed 's/[[:alnum:]]*\([0-9]\{5\}\)$/\1/; s/[[:alnum:]]*\([0-9]\{5\}-[0-9]\{4\}\)$/\1/' myfile

# 4  
Old 09-29-2009
Or awk , just shorter Smilie
Code:
awk '{$2=($2~/-/)?substr($2,length($2)-9):substr($2,length($2)-4)}1' file

# 5  
Old 09-30-2009
Quote:
Originally Posted by danmero
Or awk , just shorter Smilie
Code:
awk '{$2=($2~/-/)?substr($2,length($2)-9):substr($2,length($2)-4)}1' file


wow dan, that's amazing, would you mind explain a bit on how this works?
what is the ? symbol do?
what is the ($2~/-/) do?
what is the }1 in the end do?
# 6  
Old 09-30-2009
Another one:

Code:
perl -pe's/[^,]*(\d{5}(-\d+)?)$/$1/' infile

Or:

Code:
sed  's/[^,]*\([0-9]\{5\}\(-[0-9]*\)\{,1\}\)$/\1/' infile


Last edited by radoulov; 09-30-2009 at 02:59 PM..
# 7  
Old 09-30-2009
Quote:
Originally Posted by grossgermany
wow dan, that's amazing, would you mind explain a bit on how this works?
what is the ? symbol do?
what is the ($2~/-/) do?
what is the }1 in the end do?
It likes to use "if else" in awk, but shorter.

Code:
awk '{if ($2~/-/) {print $1 substr($2,length($2)-9)} else {print $1 substr($2,length($2)-4)}}' urfile


Previous Thread | Next Thread
Test Your Knowledge in Computers #237
Difficulty: Easy
Paul Baran was the first to build a theoretical model for communication using packet switching.
True or False?

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

sed / awk script to delete the two digits from first 3 digits

Hi All , I am having an input file as stated below 5728 U_TOP_LOGIC/U_CM0P/core/u_cortexm0plus/u_top/u_sys/u_core/r03_q_reg_20_/Q 011 611 U_TOP_LOGIC/U_CM0P/core/u_cortexm0plus/u_top/u_sys/u_core/r04_q_reg_20_/Q 011 3486... (4 Replies)
Discussion started by: kshitij
4 Replies

2. Programming

DB2 convert digits to binary format

Dear Team We use DB2 v10.5 and using DBArtisan tool Can someone please guide how to convert digits to binary numbers using db2 feature. Ex> for number 9 , binary should be 1001 ( 8+1) Any help appreciated. Thanks (2 Replies)
Discussion started by: Perlbaby
2 Replies

3. Shell Programming and Scripting

Convert a column to a line

Hi, I need to convert my text file into a sort of matrix form. my input file has 5 columns. $2 and $4 will be ignored and omitted from output, while $3 need to be re-arranged horizontally on top:- Akd1 aa233 Akd1 545 524.2 jlk01 aa233 Akd1 90 447 mht5 ... (2 Replies)
Discussion started by: redse171
2 Replies

4. Shell Programming and Scripting

Convert Rows into Column

Hi Experts, I have a requirement to convert rows into columns. For e.g. Input File: Output File should be like Appreciate if you could suggest code snippet(may be awk) for above requirement... Thanks in Advance for your help... (3 Replies)
Discussion started by: sai_2507
3 Replies

5. Shell Programming and Scripting

Perl Script remove digits and convert

Hello Guy's Quick question which im sure many can answer in seconds. Basically I have a perl script which is running commands to an element and then taking some of the the output and printing it to the screen. One of the outputs is a variable Hex Number. What I would like to do is strip... (1 Reply)
Discussion started by: mutley2202
1 Replies

6. Shell Programming and Scripting

convert row to column with respect of first column.

Input file A.txt :- C2062 -117.6 -118.5 -117.5 C5145 0 0 0 C5696 0 0 0 Output file B.txt C2062 X -117.6 C2062 Y -118.5 C2062 Z -117.5... (4 Replies)
Discussion started by: asavaliya
4 Replies

7. Shell Programming and Scripting

Find filenames with three digits and add zeros to make five digits

Hello all! I've looked all over the internet and this site and have come up a loss with an easy way to make a bash script to do what I want to do. I have a file with a naming convention as follows: 2012-01-18 string of words here 123.jpg 2012-01-18 string of words here 1234.jpg 2012-01-18... (2 Replies)
Discussion started by: Buzzman25
2 Replies

8. Shell Programming and Scripting

Convert string in a column

Hi I got this: aix.acct,aix.system.config.cron,aix.system.config.src,aix.system.install,string2 and I want this: aix.acct system.config.cron aix.system.config.src aix.system.install string2 I tried using sed by changing ',' into an 'ENTER' but I couldn't. :-( thxs (2 Replies)
Discussion started by: iga3725
2 Replies

9. Shell Programming and Scripting

help: single digits inflated to 2 digits

Hi Folks Probably an easy one here but how do I get a sequence to get used as mentioned. For example in the following I want to automatically create files that have a 2 digit number at the end of their names: m@pyhead:~$ for x in $(seq 00 10); do touch file_$x; done m@pyhead:~$ ls file*... (2 Replies)
Discussion started by: amadain
2 Replies

10. UNIX for Dummies Questions & Answers

Convert first line into column

I have a file: 2009_11 3455 500 5355 600 7777 700 The first line is the period. I want to concatenate the Period into every line using a one line command..I guess maybe awk or something. So the output would look like this: 3455 500 2009_11 5355 600 2009_11 7777 700 2009_11 ... (4 Replies)
Discussion started by: alfredo123
4 Replies

Featured Tech Videos