Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Help using sed or awk for file edit

Posted on 2007-04-02
8
Medium Priority
?
449 Views
Last Modified: 2010-04-21
Can I ask for some help editting a file using sed or awk?

I have a pipe delimited file with 30 fields per record.

The 30th field contains numbers.

I want to find all the 12 digit numbers that start with a 7, and change them to eleven digit numbers.  Basically I need to remove the leading 7 from the 12 digit numbers so I am left with a 11 digit number in that field.
0
Comment
Question by:roone
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 3
8 Comments
 
LVL 46

Expert Comment

by:Kent Olsen
ID: 18837937
Hello roone,

There are several ways to do this.  The easiest sed solution is to assume that the last field is being edited.

Change the ',' to the correct separator, if necessary.  This solution requires that there are no null fields (there are no consecutive separators).


sed 's/,7[0-9]\{11\}$/,&/; s/,,7/,/' myfile

Good Luck,
Kent
0
 

Author Comment

by:roone
ID: 18838010
The records are separated by |

OK.
Thanks.
0
 
LVL 46

Expert Comment

by:Kent Olsen
ID: 18838033

Make sure to escape the '|' character.   :)

sed 's/\|7[0-9]\{11\}$/\|&/; s/\|\|7/\|/' myfile


0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 

Author Comment

by:roone
ID: 18838078
# cat testsed
s/|7[0-9]\{11\}$/|&/; s/||7/|/
#

I made this sed file.  I used it on a test file, and it just removed the numbers starting with 7.

Can you break down the actual expression for me?

I understand the first part "search for a pipe followed by a seven and then 11 other digits"
s/|7[0-9]\{11\}
, right?

But I get lost after the $
0
 

Author Comment

by:roone
ID: 18838087
Oh, wait.  There are consecutive separators.

But I am definately only touching the last field.

Can't I say, grab the 30th field and then do this substitution?

0
 

Author Comment

by:roone
ID: 18838192
# cat trythis
s/\(7\)\([0-9]\{11\}\)/\2/g


This worked for me.

Thanks.


0
 
LVL 46

Accepted Solution

by:
Kent Olsen earned 200 total points
ID: 18838703
Hi roone,

You can certainly grab the 30th something.  The script that I provided grabbed the last field, which happens to be the 30th.  :)

I don't know your data very well, but your script doesn't care where the 7........... entry is.  And will change ALL occurences, not just parameter 30.


Kent
0
 

Author Comment

by:roone
ID: 18839151
Understood.  Thanks for the help.
0

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Attention: This article will no longer be maintained. If you have any questions, please feel free to mail me. jgh@FreeBSD.org Please see http://www.freebsd.org/doc/en_US.ISO8859-1/articles/freebsd-update-server/ for the updated article. It is avail…
FreeBSD on EC2 FreeBSD (https://www.freebsd.org) is a robust Unix-like operating system that has been around for many years. FreeBSD is available on Amazon EC2 through Amazon Machine Images (AMIs) provided by FreeBSD developer and security office…
Learn how to get help with Linux/Unix bash shell commands. Use help to read help documents for built in bash shell commands.: Use man to interface with the online reference manuals for shell commands.: Use man to search man pages for unknown command…
Learn how to find files with the shell using the find and locate commands. Use locate to find a needle in a haystack.: With locate, check if the file still exists.: Use find to get the actual location of the file.:
Suggested Courses

704 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question