By using "sed" command. Please help!!!


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting By using "sed" command. Please help!!!
# 1  
Old 05-07-2010
By using "sed" command. Please help!!!

Hello,

My input files are having header/body/footer. The first three digits finds whether the data is header/body/footer. For example,

Code:
010AAAAA 20100507 234KB BBBBBBBBBB_20100506.DAT
020CCCCC                     DDDDDDDDD         373983983           19750426           456.90               3983939EE
020FFFFF                     GGGGGGGGG         38938993H           19801102           783.33               DKJFDKJ983
030END OF FILE TOTAL 39839.22

From the above file, there is a date of birth in body (=020). I want to remove/substitute the dateofbirth with spaces. Like, 19750426 is the date of birth but want to substiute as spaces " ". Want to do this same in all records in the file. Can you please tell me how to do this in shell script?

The content of the file is,
Code:
From 1 to 3 = RECORD_TYPE
From 4 to 40 = NAME
From 41 to 80 = DESIGNATION

and so on.

Thanks,
VenkatSmilie

Last edited by vgersh99; 05-07-2010 at 06:39 AM.. Reason: code tags, please!
# 2  
Old 05-07-2010
like?

Code:
awk '/^02/ {$4=""}{print}' file

# 3  
Old 05-07-2010
Tried with the givien command. But it is eliminating the spaces from the remain fields also. But I want to substitute with only spaces in that DOB field. The result of the given command as:
Code:
010AAAAA 20100507 234KB BBBBBBBBBB_20100506.DAT
020CCCCC DDDDDDDDD 373983983          456.90 3983939EE
020FFFFF GGGGGGGGG 38938993H          783.33 DKJFDKJ98
030END OF FILE TOTAL 39839.22


Last edited by Scott; 05-07-2010 at 07:00 AM.. Reason: Code tags, PLEASE!
# 4  
Old 05-07-2010
How about ...

Code:
#! /bin/bash

cat in.file | while read LINE
do
  if [ "${LINE:0:3}" == "020" ]
  then
    echo "$LINE" | sed 's/ [[:digit:]]\{8\} /          /' >> out.file
  else
    echo "$LINE" >> out.file
  fi
done

more out.file
exit 0

Code:
[house@leonov] bash test.bash
010AAAAA 20100507 234KB BBBBBBBBBB_20100506.DAT
020CCCCC DDDDDDDDD 373983983          456.90 3983939EE
020FFFFF GGGGGGGGG 38938993H          783.33 DKJFDKJ983
030END OF FILE TOTAL 39839.22

# 5  
Old 05-07-2010
Hello,

My input files are having header/body/footer. The first three digits finds whether the data is header/body/footer. For example,

Code:
010AAAAA 20100507 234KB BBBBBBBBBB_20100506.DAT
020CCCCC                     DDDDDDDDD         373983983           19750426           456.90               3983939EE
020FFFFF                     GGGGGGGGG         38938993H           19801102           783.33               DKJFDKJ983
030END OF FILE TOTAL 39839.22

From the above file, there is a date of birth in body (=020). I want to remove/substitute the dateofbirth with spaces. Like, 19750426 is the date of birth but want to substiute as spaces "1#7#0#2#". Want to do this same in all records in the file. Can you please tell me how to do this in shell script?

Code:
The content of the file is,
From 1 to 3 = RECORD_TYPE
From 4 to 40 = NAME
From 41 to 80 = DESIGNATION
and so on.

A small change in my previous post. Instead of substitue the spaces, need to fill every 2nd character as # in the Date of Birth field.

---------- Post updated at 10:25 AM ---------- Previous update was at 06:00 AM ----------

dr.house! Thanks for your coding. But I tried and it is still giving the same input file content as result Smilie

Last edited by nvkuriseti; 05-07-2010 at 07:17 AM.. Reason: Code tags, PLEASE!
# 6  
Old 05-07-2010
Quote:
Originally Posted by nvkuriseti
...
From the above file, there is a date of birth in body (=020). I want to remove/substitute the dateofbirth with spaces. Like, 19750426 is the date of birth but want to substiute as spaces "1#7#0#2#". Want to do this same in all records in the file. Can you please tell me how to do this in shell script?
...
A small change in my previous post. Instead of substitue the spaces, need to fill every 2nd character as # in the Date of Birth field.
...
You haven't mentioned if the date of birth part begins at a specific column in your file. If it does, and if you know that column number, then you can do something like the following Perl one-liner:

Code:
$
$ cat f1
010AAAAA 20100507 234KB BBBBBBBBBB_20100506.DAT
020CCCCC                     DDDDDDDDD         373983983           19750426           456.90               3983939EE
020FFFFF                     GGGGGGGGG         38938993H           19801102           783.33               DKJFDKJ983
030END OF FILE TOTAL 39839.22
$
$
$ perl -plne 's/^(020.{64})(\d).(\d).(\d).(\d).(.*)$/$1$2#$3#$4#$5#$6/' f1
010AAAAA 20100507 234KB BBBBBBBBBB_20100506.DAT
020CCCCC                     DDDDDDDDD         373983983           1#7#0#2#           456.90               3983939EE
020FFFFF                     GGGGGGGGG         38938993H           1#8#1#0#           783.33               DKJFDKJ983
030END OF FILE TOTAL 39839.22
$
$

Over here I know that date of birth begins from column 68 in rows that start with "020". Hence I put "64" in the brace quantifiers so that total length of the part before it is 3 (length of "020") + 64 = 67.

HTH,
tyler_durden
# 7  
Old 05-07-2010
Quote:
Originally Posted by nvkuriseti
A small change in my previous post. Instead of substitue the spaces, need to fill every 2nd character as # in the Date of Birth field.
Correct me if I'm wrong but this requirement does not seem to bear any significance in the real world. Smilie
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Using "mailx" command to read "to" and "cc" email addreses from input file

How to use "mailx" command to do e-mail reading the input file containing email address, where column 1 has name and column 2 containing “To” e-mail address and column 3 contains “cc” e-mail address to include with same email. Sample input file, email.txt Below is an sample code where... (2 Replies)
Discussion started by: asjaiswal
2 Replies

2. Shell Programming and Scripting

Awk,sed : change every 2nd field ":" to "|"

Hi Experts, I have a string with colon delimited, want 2nd colon to be changed to a pipe. data: 101:8:43:4:72:14:41:69:85:3:137:4:3:0:4:0:9:3:0:3:12:3: I am trying with sed, but can change only 1 occurance: echo "101:8:43:4:72:14:41:69:85:3:137:4:3:0:4:0:9:3:0:3:12:3:" | sed 's/:/|/2'... (5 Replies)
Discussion started by: rveri
5 Replies

3. Shell Programming and Scripting

sed returns error "sed: -e expression #1, char 18: unterminated `s' command"

Hello All, I have something like below LDC100/rel/prod/libinactrl.a LAA2000/rel/prod/libinactrl.a I want to remove till first forward slash that is outputshould be as below rel/prod/libinactrl.a rel/prod/libinactrl.a How can I do that ??? (8 Replies)
Discussion started by: anand.shah
8 Replies

4. Post Here to Contact Site Administrators and Moderators

Suggestion: adding two new groups "sed" and "awk"

Majority of the questions are pertaining file/string parsing w.r.t sed or awk It would be nice to have these two as their own sub category under shell-programming-scripting which can avoid lot of duplicate posts. (1 Reply)
Discussion started by: jville
1 Replies

5. Shell Programming and Scripting

how to use "cut" or "awk" or "sed" to remove a string

logs: "/home/abc/public_html/index.php" "/home/abc/public_html/index.php" "/home/xyz/public_html/index.php" "/home/xyz/public_html/index.php" "/home/xyz/public_html/index.php" how to use "cut" or "awk" or "sed" to get the following result: abc abc xyz xyz xyz (8 Replies)
Discussion started by: timmywong
8 Replies

6. Shell Programming and Scripting

Using sed to find text between a "string " and character ","

Hello everyone Sorry I have to add another sed question. I am searching a log file and need only the first 2 occurances of text which comes after (note the space) "string " and before a ",". I have tried sed -n 's/.*string \(*\),.*/\1/p' filewith some, but limited success. This gives out all... (10 Replies)
Discussion started by: haggismn
10 Replies

7. UNIX for Dummies Questions & Answers

Unix "look" Command "File too large" Error Message

I am trying to find lines in a text file larger than 3 Gb that start with a given string. My command looks like this: $ look "string" "/home/patrick/filename.txt" However, this gives me the following message: "look: /home/patrick/filename.txt: File too large" So, I have two... (14 Replies)
Discussion started by: shishong
14 Replies

8. Shell Programming and Scripting

awk command to replace ";" with "|" and ""|" at diferent places in line of file

Hi, I have line in input file as below: 3G_CENTRAL;INDONESIA_(M)_TELKOMSEL;SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL My expected output for line in the file must be : "1-Radon1-cMOC_deg"|"LDIndex"|"3G_CENTRAL|INDONESIA_(M)_TELKOMSEL"|LAST|"SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL" Can someone... (7 Replies)
Discussion started by: shis100
7 Replies

9. Shell Programming and Scripting

Simplify Bash Script Using "sed" Or "awk"

Input file: 2 aux003.net3.com error12 6 awn0117.net1.com error13 84 aux008 error14 29 aux001.ha.ux.isd.com error12 209 aux002.vm.ux.isd.com error34 21 alx0027.vm.net2.com error12 227 dux001.net5.com error123 22 us008.dot.net2.com error121 13 us009.net2.com error129Expected Output: 2... (4 Replies)
Discussion started by: sQew
4 Replies

10. Shell Programming and Scripting

cat $como_file | awk /^~/'{print $1","$2","$3","$4}' | sed -e 's/~//g'

hi All, cat file_name | awk /^~/'{print $1","$2","$3","$4}' | sed -e 's/~//g' Can this be done by using sed or awk alone (4 Replies)
Discussion started by: harshakusam
4 Replies
Login or Register to Ask a Question