Adding variables to repeating strings


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Adding variables to repeating strings
# 15  
Old 02-02-2013
Minor comment to Don's fine proposal: replacing the s[NR] assignment with
Code:
        s[NR] = sprintf ("-%c", ++c[$1]+96)  # assign lower case letter in increasing sequence

would get rid of the BEGIN ning split and (maybe) enhance reability.
Using (++c[$1]>26 ? 34 : c[$1]+96) would render the separate -* assignment redundant.

Last edited by RudiC; 02-02-2013 at 07:12 AM.. Reason: save next code line
These 2 Users Gave Thanks to RudiC For This Post:
# 16  
Old 02-02-2013
Quote:
Originally Posted by RudiC
Minor comment to Don's fine proposal: replacing the s[NR] assignment with
Code:
        s[NR] = sprintf ("-%c", ++c[$1]+96)  # assign lower case letter in increasing sequence

would get rid of the BEGIN ning split and (maybe) enhance reability.
Using (++c[$1]>26 ? 34 : c[$1]+96) would render the separate -* assignment redundant.
Hi Rudi,
Thanks for the comments.
I added the if(c[$1] > 26) s[NR] = "-*" as an afterthought after I saw message #11 in this thread. If I had thought about overflowing 26 (even though the early messages said there would be no more than 9) when I started writing the script I would have done it differently. Looking at it again now, I would certainly add comments and make the code even tighter.

If I were only writing code for a particular system (that used code sets based on ASCII) I might consider using something like:
Code:
(++c[$1]>26 ? 34 : c[$1]+96)

except I would have used 42 (or more likely "*") instead of 34 (which is the ASCII double-quote (") character). Note however that this won't work on IBM mainframe AIX (or any other system using code sets based on EBCDIC) even if you change the 34 and 96 to the corresponding EBCDIC characters since the lowercase alphabetic characters are not all in contiguous locations.

If I were going to do this script now, I would use:
Code:
# Usage: awk -f this_file  input_file
# variable index:
#       c[line contents]        Count of occurrences of input line with the
#                               same contents indexed by input line $0.
#
#       i                       Output loop index.
#
#       o[line#]                Main contents of output line indexed by NR or i.
#
#       s[line#]                Suffix for output line indexed by NR.  (Printed
#                               only when c[i] > 1.)
#
#       suffices[count*2+1]     Array of 2 character substrings to be used as
#                               the suffix for output lines that correspond to
#                               input lines that appear multiple times.  The
#                               first two characters are a special case used
#                               when an input line appears more than 26 times.
BEGIN { suffices="-*-a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z"}
{       s[NR] = substr(suffices, ++c[o[NR] = $1] > 26 ? 1 : c[$1] * 2 + 1, 2)}
END {   for(i = 1; i <= NR; i++)
                printf("%s%s\n", o[i], c[o[i]] > 1 ? s[i] : "")
}

 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Adding sequential index to duplicate strings

I have a text file in the following format >Homo sapiens KQKCLYNLPFKRNLEGCRERCSLVIQIPRCCKGYFGRDCQACPGGPDAPCNNRGVCLDQY SATGECKCNTGFNGTACEMCWPGRFGPDCLPCGCSDHGQCDDGITGSGQCLCETGWTGPS CDTQAVLPAVCTPPCSAHATCKENNTCECNLDYEGDGITCTVVDFCKQDNGGCAKVARCS... (2 Replies)
Discussion started by: jerrild
2 Replies

2. Shell Programming and Scripting

--Parsing out strings for repeating delimiters for everyline

Hello: I have some text output, on SunOS 5.11 platform using KSH: I am trying to parse out each string within the () for each line. I tried, as example: perl -lanF"" -e 'print "$F $F $F $F $F $F"' But for some reason, the output gets all garbled after the the first fields.... (8 Replies)
Discussion started by: gilgamesh
8 Replies

3. Shell Programming and Scripting

Script to rename the repeating strings

All, I have a sample text like below. Key (Header) Key1 ABC Key2 ABC Key3 ABC ABC Key4 ABC Key5 ABC ABC ABC Required Output Key (Header) Key1 (2 Replies)
Discussion started by: ks_reddy
2 Replies

4. UNIX for Dummies Questions & Answers

Need help with repeating variables in a shell script

I should preface this by saying I have never worked with shell scripts before so this is all new to me. I was able to make something that worked, but is terribly optimized, and I have no idea how to improve it. If anything it's a pretty hilarious script: #/bin/bash get_char() { ... (4 Replies)
Discussion started by: ricco19
4 Replies

5. Shell Programming and Scripting

AWK adding prefix/suffix to list of strings

75 103 131 133 138 183 197 221 232 234 248 256 286 342 368 389 463 499 524 538 (5 Replies)
Discussion started by: chrisjorg
5 Replies

6. Shell Programming and Scripting

Adding Variables

Hi. I have a for loop that I use to extract integer values in a shell script (ksh). Now, I would like to add the values. My preference, from my c programming days, would be to do something like the commented out line below in the for loop. However, this is not recognised. So I use the line... (2 Replies)
Discussion started by: mikem22
2 Replies

7. Shell Programming and Scripting

Adding strings to lines in a file

Hi all, I have a positional text file that comes from some source application. Before it is processed by destination application I have to add some header (suffix) to every record(line) in the file. e.g. Actual File ............... AccountDetails AcNO Name Amount 1234 John 26578 5678... (3 Replies)
Discussion started by: sharath160
3 Replies

8. Shell Programming and Scripting

Adding Strings to a file

Well thanks a lot but I have another Problem I try to solve. I habe one simple Textfile with entries like this, for example: file1 file2 file3 file4 ... file200 And I want to add Strings at the beginning on the line. Like this word1 file1 word1 file2 ... I hope you can help me (3 Replies)
Discussion started by: Blackbox
3 Replies

9. Shell Programming and Scripting

bash hell , removing " and adding from a strings

I'm writing a bash script and i'm stuck the out put of a dialog menu is echo $select "foo" "bar" "lemon" cheese" while I need $foo $bar $lemon $cheese to reuse them as strings later in the script and very new to bash scripting and i've no idea how to do this any help would be... (2 Replies)
Discussion started by: xpd259
2 Replies

10. Shell Programming and Scripting

Repeating variables in the code

Hi all, I had written 3 KSH scripts for different functionalities. In all these 3 files there are some 30 variables in common. So I want to reduce the code by placing these variables in a common properties file named (dataload.prop/dataload.parms/dataload.txt) or txt file and access it... (1 Reply)
Discussion started by: mahalakshmi
1 Replies
Login or Register to Ask a Question