Sponsored Content
Top Forums Shell Programming and Scripting How to insert strings at certain position Post 89618 by whatisthis on Monday 14th of November 2005 04:34:57 PM
Old 11-14-2005
change FS from "," to blank

Hi,
I forgot to mention: I need to change FS from "," to balnk space before I do add strings.
1089, KEVIN_RIDDLE
1137, STEPHEN_SMITH
1214, MELISA_someone
1267, SANDY_name

I am trying to manipulate the OFS and combine it with your code.
But not sucessful.....
I also don't quite understand the code you provided, it worked wonderfully.
I just don't understand why do you need to put print before sprintf?

Thanks a lot!
 

10 More Discussions You Might Find Interesting

1. HP-UX

find the position in a file and insert the data there

Hi, I have a EDI data file ARROWTEST of size 18246 characters. And I want to insert some data after 4200 position in the file. How I can find the position 4200 in that file....Please advise. Regards, (5 Replies)
Discussion started by: isingh786
5 Replies

2. Shell Programming and Scripting

How to insert at a particular position in flat file

Hi All, I have a flat file with ~ as de-limiter (e.g: aaa~ba a~caa~0~d~e) What I want is check if the 4th character is 0 and replace it with say 4. So now it becomes : aaa~ba a~caa~4~d~e. I have to do this for the whole file, but the delimiter position remains the same, not the... (10 Replies)
Discussion started by: akdwivedi
10 Replies

3. Shell Programming and Scripting

insert server name in position 1 on each line

Hello, It has been a long time since I have written unix code and I need to insert a variable into the first position of each line in a file. Below is an example of the script and the desired output file Here is my short script server="$(hostname)" df -kg | awk '{print $1, $2, $3, $4,... (3 Replies)
Discussion started by: rlc198842
3 Replies

4. Shell Programming and Scripting

Insert character in a specific position of a file

Hi, I need to add Pipe (|) at 5th and 18th position of all records a file. How can I do this? I tried to add it at 5th position using the below code. It didnt work. Please help!!! awk '{substr($0,5,1) ~ /|/}{print}' $input_file > $temp_file (1 Reply)
Discussion started by: gpaulose
1 Replies

5. Shell Programming and Scripting

insert character in particular position.

I want to insert space in 7th position of all the lines usign vi editor or sed command Input file 12345689010 abcdefghijk . . Output file 123456 89010 abcdef ghijk . . (7 Replies)
Discussion started by: Jairaj
7 Replies

6. UNIX for Dummies Questions & Answers

Help with finding matching position on strings

I have a DNA file like below and I am able to write a short program which finds/not an input motif, but I dont understand how I can include in the code to report which position the motif was found. Example I want to find the first or all "GAT" motifs and want the program to report which position... (12 Replies)
Discussion started by: pawannoel
12 Replies

7. Shell Programming and Scripting

Insert | in specific position

Hi , I have a file which has line similar to below 13123324234234234234234234234234234 3454546456dfhgfhgh454645654asdasfsdsddfgdgdfg 345345345mnmnbmnb346mnb4565464564564645645 Not for each line for specific position I need to insert some '|' Positions are fixed. Like 3,5,9,11 So the... (5 Replies)
Discussion started by: Anupam_Halder
5 Replies

8. Shell Programming and Scripting

How to insert a '#' in the first position of all the files?

Hi All, how to insert a '#' in the first position of all the files based on a certain condition. I tried this: cat /bin/user/input_file.txt | while read a do b=`sed 's/.*song=good.*/\#&/g' $a ` echo $b > /bin/user/new/output_file.txt done input_file.txt has list of names of 10... (5 Replies)
Discussion started by: anand787
5 Replies

9. UNIX for Dummies Questions & Answers

Using sed to insert at position x and then every interval y for each line

Thanks to help from Don Cragun in post 302924174, I'm off and getting into trouble on my own (finally) with sed. Here is my goal - insert \\r\n at the 60th character on each line and then every 76th character thereafter: Input:... (3 Replies)
Discussion started by: gusbrown
3 Replies

10. UNIX for Beginners Questions & Answers

Print strings from a particular position in each line

I am using bash in Fedora 30 From the below lines (ls -l output), how can I print whatever is between the strings 'status_' and '.log' $ ls -l | grep -i status -rw-rw-r--. 1 sysadmin sysadmin 378530 Nov 11 21:58 status_vsbm1.log -rw-rw-r--. 1 sysadmin sysadmin 428776 Nov 11 21:58... (8 Replies)
Discussion started by: kraljic
8 Replies
PERLHACKTUT(1)						 Perl Programmers Reference Guide					    PERLHACKTUT(1)

NAME
perlhacktut - Walk through the creation of a simple C code patch DESCRIPTION
This document takes you through a simple patch example. If you haven't read perlhack yet, go do that first! You might also want to read through perlsource too. Once you're done here, check out perlhacktips next. EXAMPLE OF A SIMPLE PATCH
Let's take a simple patch from start to finish. Here's something Larry suggested: if a "U" is the first active format during a "pack", (for example, "pack "U3C8", @stuff") then the resulting string should be treated as UTF-8 encoded. If you are working with a git clone of the Perl repository, you will want to create a branch for your changes. This will make creating a proper patch much simpler. See the perlgit for details on how to do this. Writing the patch How do we prepare to fix this up? First we locate the code in question - the "pack" happens at runtime, so it's going to be in one of the pp files. Sure enough, "pp_pack" is in pp.c. Since we're going to be altering this file, let's copy it to pp.c~. [Well, it was in pp.c when this tutorial was written. It has now been split off with "pp_unpack" to its own file, pp_pack.c] Now let's look over "pp_pack": we take a pattern into "pat", and then loop over the pattern, taking each format character in turn into "datum_type". Then for each possible format character, we swallow up the other arguments in the pattern (a field width, an asterisk, and so on) and convert the next chunk input into the specified format, adding it onto the output SV "cat". How do we know if the "U" is the first format in the "pat"? Well, if we have a pointer to the start of "pat" then, if we see a "U" we can test whether we're still at the start of the string. So, here's where "pat" is set up: STRLEN fromlen; register char *pat = SvPVx(*++MARK, fromlen); register char *patend = pat + fromlen; register I32 len; I32 datumtype; SV *fromstr; We'll have another string pointer in there: STRLEN fromlen; register char *pat = SvPVx(*++MARK, fromlen); register char *patend = pat + fromlen; + char *patcopy; register I32 len; I32 datumtype; SV *fromstr; And just before we start the loop, we'll set "patcopy" to be the start of "pat": items = SP - MARK; MARK++; sv_setpvn(cat, "", 0); + patcopy = pat; while (pat < patend) { Now if we see a "U" which was at the start of the string, we turn on the "UTF8" flag for the output SV, "cat": + if (datumtype == 'U' && pat==patcopy+1) + SvUTF8_on(cat); if (datumtype == '#') { while (pat < patend && *pat != ' ') pat++; Remember that it has to be "patcopy+1" because the first character of the string is the "U" which has been swallowed into "datumtype!" Oops, we forgot one thing: what if there are spaces at the start of the pattern? "pack(" U*", @stuff)" will have "U" as the first active character, even though it's not the first thing in the pattern. In this case, we have to advance "patcopy" along with "pat" when we see spaces: if (isSPACE(datumtype)) continue; needs to become if (isSPACE(datumtype)) { patcopy++; continue; } OK. That's the C part done. Now we must do two additional things before this patch is ready to go: we've changed the behaviour of Perl, and so we must document that change. We must also provide some more regression tests to make sure our patch works and doesn't create a bug somewhere else along the line. Testing the patch The regression tests for each operator live in t/op/, and so we make a copy of t/op/pack.t to t/op/pack.t~. Now we can add our tests to the end. First, we'll test that the "U" does indeed create Unicode strings. t/op/pack.t has a sensible ok() function, but if it didn't we could use the one from t/test.pl. require './test.pl'; plan( tests => 159 ); so instead of this: print 'not ' unless "1.20.300.4000" eq sprintf "%vd", pack("U*",1,20,300,4000); print "ok $test "; $test++; we can write the more sensible (see Test::More for a full explanation of is() and other testing functions). is( "1.20.300.4000", sprintf "%vd", pack("U*",1,20,300,4000), "U* produces Unicode" ); Now we'll test that we got that space-at-the-beginning business right: is( "1.20.300.4000", sprintf "%vd", pack(" U*",1,20,300,4000), " with spaces at the beginning" ); And finally we'll test that we don't make Unicode strings if "U" is not the first active format: isnt( v1.20.300.4000, sprintf "%vd", pack("C0U*",1,20,300,4000), "U* not first isn't Unicode" ); Mustn't forget to change the number of tests which appears at the top, or else the automated tester will get confused. This will either look like this: print "1..156 "; or this: plan( tests => 156 ); We now compile up Perl, and run it through the test suite. Our new tests pass, hooray! Documenting the patch Finally, the documentation. The job is never done until the paperwork is over, so let's describe the change we've just made. The relevant place is pod/perlfunc.pod; again, we make a copy, and then we'll insert this text in the description of "pack": =item * If the pattern begins with a C<U>, the resulting string will be treated as UTF-8-encoded Unicode. You can force UTF-8 encoding on in a string with an initial C<U0>, and the bytes that follow will be interpreted as Unicode characters. If you don't want this to happen, you can begin your pattern with C<C0> (or anything else) to force Perl not to UTF-8 encode your string, and then follow this with a C<U*> somewhere in your pattern. Submit See perlhack for details on how to submit this patch. AUTHOR
This document was originally written by Nathan Torkington, and is maintained by the perl5-porters mailing list. perl v5.14.2 2011-09-19 PERLHACKTUT(1)
All times are GMT -4. The time now is 05:49 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy