How to put a word starting at particular position in a file using shell scripting


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to put a word starting at particular position in a file using shell scripting
# 1  
Old 11-26-2009
Question How to put a word starting at particular position in a file using shell scripting

Hi all,
I'm new to shell scripting and hence this query.
I have 2 files. temp.txt and config.txt.
The values in temp.txt are tab separated.

ex: temp.txt
Code:
AB   CDE  GHIJ    OPQRS   WXY

ex:config.txt (1st line for 1st element of temp.txt and so on)
Code:
start = '1' end='5'
start = '6' end = '10'
start= '11' end ='15'

and so on....

i have to create an output such that each word of temp.txt is inserted into a new file main.txt with starting position as specified in config.txt.
like position 1-5 shud have the 1st word i.e 1st position 'A' 2nd position 'B' and position 3-5 shud be blank. C shud start from position 6.

Last edited by Franklin52; 11-26-2009 at 03:12 PM.. Reason: Please use code tags!
# 2  
Old 11-26-2009
Code:
awk > main.txt 'NR == FNR { 
  n = split($0, t, "\047")
  fmt[NR] = t[4]; next 
  }
{ 
  for (i=1; i<=NF; i++) 
    printf "%-*s", fmt[i], $i
  print ""    
  }' config.txt temp.txt

# 3  
Old 11-26-2009
Code:
my $str= "AB   CDE  GHIJ    OPQRS   WXY";
my @tmp = split(/\s+/,$str);
while(<DATA>){
	if(/start\s*=\s*'([0-9]+)'\s*end\s*=\s*'([0-9]+)'/){
		my $len = $2-$1;
		printf "%-$len"."s",$tmp[$.-1];
	}
}
__DATA__
start = '1' end='5'
start = '6' end = '10'
start= '11' end ='18'
start= '19' end ='25'
start= '26' end ='28'

# 4  
Old 11-27-2009
Question Not working

Quote:
Originally Posted by radoulov
Code:
awk > main.txt 'NR == FNR { 
  n = split($0, t, "\047")
  fmt[NR] = t[4]; next 
  }
{ 
  for (i=1; i<=NF; i++) 
    printf "%-*s", fmt[i], $i
  print ""    
  }' config.txt temp.txt

the o/p is as follows
Code:
A    AB        ABC            ABDC

From the 1st and 2nd word are at correct position but 3rd word onwards the logic goes for a toss.
# 5  
Old 11-27-2009
Quote:
Originally Posted by subhrap.das
the o/p is as follows
Code:
A    AB        ABC            ABDC

From the 1st and 2nd word are at correct position but 3rd word onwards the logic goes for a toss.
Yes,
the code is wrong.

Try this instead:

Code:
awk > main.txt 'NR == FNR { 
  split($0, t, "\047")
  fmt[NR] = t[4] - (t[2] - 1); next
  }
{ 
  for (i=1; i<=NF; i++) 
    printf "%-*s", fmt[i], $i 
  print x
  }' config.txt temp.txt

# 6  
Old 11-27-2009
MySQL more help please

Quote:
Originally Posted by radoulov
Yes,
the code is wrong.

Try this instead:

Code:
awk > main.txt 'NR == FNR { 
  split($0, t, "\047")
  fmt[NR] = t[4] - (t[2] - 1); next
  }
{ 
  for (i=1; i<=NF; i++) 
    printf "%-*s", fmt[i], $i 
  print x
  }' config.txt temp.txt

Works like charm radoulov but a slight change in the requirement
The config file now looks like this:

Code:
{
            'name'  :   'field1',
            'type'  :   'input',
            'spos'  :   1,
            'size'  :   2,
        },
        {
            'name'  :   'field2',
            'type'  :   'input',
            'spos'  :   3,
            'size'  :   1,
        },
        {
            'name'  :   'field3',
            'type'  :   'input',
            'spos'  :   4,
            'size'  :   8,
        },

and the values have to be placed based on 'SPOS'(starting position).
Please help me with this.
# 7  
Old 11-27-2009
Something like this:

Code:
awk 'NR == FNR {
  /^[ \t]*\47name/ && c++      # get the field number
  if (/^[ \t]*\47size/) {
    split($0, t, ":")          
    gsub(/[ \t\47,]/, x, t[2]) # strip punctuation
    fmt[c] = t[2]              # get the size 
    }
  next                         # run the above actions                                     
  }                            # + only for the first input file
{ 
  for (i=1; i<=NF; i++)        # output the strings in the correct format
    printf "%" (length($i) > fmt[i] ? "." : "-" ) fmt[i] "s", $i           
  print x
  }' config.txt temp.txt

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Write a word at 72nd position of a matched line in a file

Hi, I need to search a file for a pattern,replace some other word and write a word at its 72nd position. For example, My name is Mano.Im learning Unix. I want to search the file in all lines containing the word "Mano".In that matched line,replace the word "Unix" with "Java".And... (5 Replies)
Discussion started by: mano1 n
5 Replies

2. Shell Programming and Scripting

Grep the 5th and 6th position character of a word in a file

I am trying to find/grep the 5th and 6th position character (TX) of a word in a file. I tried to do grep "....TX" file The output gives me everything in the file with TX in it. I only need the output with the TX in the 5th and 6th position of the word. Any idea Example: test1 car... (5 Replies)
Discussion started by: e_mikey_2000
5 Replies

3. Shell Programming and Scripting

Put words to fix position in a file

Hi all, There are several lines in my file as a=123,b=dene,c=2312,d=234234,g=vxcvxcv,h=44 a=3,b=dene,c=22,d=23422342334,g=vxcvxcv,h=4 a=123,b=dene,c=2312,d=234234,g=vxcvxcv,h=678 I take values with this command awk -F '' '{print $1,$2,$3}' a.txt I want to put values to a fix position... (6 Replies)
Discussion started by: bahadiraktan
6 Replies

4. Shell Programming and Scripting

removing a word in a multiple file starting at the dot extension

hi I would like to ask if someone knows a command or a script on how to rename a multiple file in the directory starting at the end of the filename or at the .extension( i would like to remove the last 11 character before the extension) for example Below is the result of my command ls inside... (5 Replies)
Discussion started by: jao_madn
5 Replies

5. Shell Programming and Scripting

Find the starting position in a file

I have a file called "INPUT" which takes the following format MNT-BANK-NUMBERO:006,00:N MNT-100-ACCOUNT-NUMBERO:018,00:N MNT-1000-DESCRIPTIONO:045:C . . . Now i got to find the displacements of the account numbers of each field of a file. For the field MNT-BANK-NUMBERO:006,00:N, the... (4 Replies)
Discussion started by: bobby1015
4 Replies

6. UNIX for Dummies Questions & Answers

Script to delete a word based on position in a file

Hi, I am new to unix. I want to delete 2 words placed at position say for example at 23rd and 45th position in a line. I used sed but couldnt achieve this. Example: the file contains 2 lines 12345 98765 "12345" 876 12345 98765 "64578" 876 I want to delete " placed at position 13 and 19... (4 Replies)
Discussion started by: nbks2u
4 Replies

7. Shell Programming and Scripting

Starting Shell Scripting

Hi, I am new to shell scripting ,infact today only i started working on it. Can any body tell me some Good tutorials that i can use and that are easy to understand I shall be obliged (1 Reply)
Discussion started by: Gousia
1 Replies

8. UNIX for Dummies Questions & Answers

Paste a word in the third field position of a file

Hi All, I have a file like this, 0.0.0.1 /account 327706,Data Cleansing,,,CRM error,100,0 The above line is a comma separted data file. I want to modify the third field to The final data file should be like 0.0.0.1 /account 327706,Data Cleansing,,,CRM error,100,0 ... (1 Reply)
Discussion started by: girish.raos
1 Replies

9. Shell Programming and Scripting

search a word in a xml file and print the out put

hi , i m having a html file and this file looks like this <ssl> <name>PIA</name> <enabled>true</enabled> <listen-port>39370</listen-port> </ssl> <log> <name>PIA</name> </log> <execute-queue> <name>weblogic.kernel.Default</name> ... (7 Replies)
Discussion started by: becksram123
7 Replies

10. Shell Programming and Scripting

How to check a word position in a file ?

Hello everybody, I have a file like this : "window 1 truck 3 duck 2... fire 1... etc..." and I would like to print the following number of a word I am searching for. (For example here, if I search for the word "fire", I will print "1") Thank you for your help ! (7 Replies)
Discussion started by: tibo
7 Replies
Login or Register to Ask a Question