Help building a variable string from a keyword - character replacements!


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Help building a variable string from a keyword - character replacements!
# 1  
Old 02-19-2019
Help building a variable string from a keyword - character replacements!

Hello scripting geniusii! I come to kneel before the alter of your wisdom!

I am looking to take a keyword and replace characters within that keyword and add them to a string variable. I would like this to only go through however many characters the word has, which may vary in size.

Example word - dominos:
Code:
$ echo "dominos" |  sed 's/./_/1; s/./_/2'
__minos
$ echo "dominos" |  sed 's/./_/1; s/./_/3'
_o_inos
$ echo "dominos" |  sed 's/./_/1; s/./_/4'
_om_nos
$ echo "dominos" |  sed 's/./_/1; s/./_/5'
_omi_os
$ echo "dominos" |  sed 's/./_/1; s/./_/6'
_omin_s
$ echo "dominos" |  sed 's/./_/1; s/./_/7'
_omino_
$ echo "dominos" |  sed 's/./_/2; s/./_/3'
d__inos
$ echo "dominos" |  sed 's/./_/2; s/./_/4'
d_m_nos
$ echo "dominos" |  sed 's/./_/2; s/./_/5'
d_mi_os
$ echo "dominos" |  sed 's/./_/2; s/./_/6'
d_min_s
$ echo "dominos" |  sed 's/./_/2; s/./_/7'
d_mino_
   ...

In the end state, I would like it to look like this:
Code:
KEYWORD="__minos _o_inos _om_nos _omi_os _omin_s _omino_ d__inos d_m_nos d_mi_os d_min_s ... "

I am doing this today manually, creating my "KEYWORD" variable, but I'm trying to tidy this all up and make my script pull the current working directory and use that as the keyword variable base, so that my script can be standardized over several different keywords I'm working with.

Hope this makes some sense, and Thanks so much in advance for your thoughts!

Dave aka Ghan
# 2  
Old 02-19-2019
what OS are you under?
Do you have gawk?
here's something to start with: echo 'dominos' | gawk -f gh.awk
where gh.awk is:
Code:
{
  len=length($0)
  for (i=1;i<=len;i++)
    for(j=i+1;j<=len;j++)
      print gensub(".", "_", i, gensub(".", "_", j, $0))
}


Last edited by vgersh99; 02-19-2019 at 04:23 PM..
These 2 Users Gave Thanks to vgersh99 For This Post:
# 3  
Old 02-20-2019
I'm just using a little utility Ubuntu box. Nothing special!


Thanks!


Dave aka Ghan
# 4  
Old 02-20-2019
Quote:
Originally Posted by ghaniba
I'm just using a little utility Ubuntu box. Nothing special!


Thanks!


Dave aka Ghan
Ok, thanks!
# 5  
Old 02-20-2019
Another approach using substr:

Code:
awk '
{ 
  printf "KEYWORD=\""
  for (i=0; i <= length($0) - 2; i++)
    for(j=i + 1; j <= length($0) - 1; j++)
      printf "%s%s", \
          substr($0, 0, i) "_"  \
          substr($0, i + 2, j - i - 1) "_"  \
          substr($0, j + 2),  \
          i == (length($0) - 2) ? "\"" : " "
   print ""
}'


Last edited by Chubler_XL; 02-20-2019 at 09:50 PM..
# 6  
Old 02-21-2019
Quote:
Originally Posted by Chubler_XL
Another approach using substr:
Wow, that's amazing, exactly what I was after. Since my skills are soo feeble, could I trouble you for one more enhancement? In that same KEYWORDS string, I'd like to do a single character replacement as well, with a single % marching through, so it would look like this?

Code:
KEYWORD="%ominos d%minos do%inos dom%nos domi%os domin%s domino% __minos _o_inos _om_nos _omi_os _omin_s _omino_ d__inos d_m_nos d_mi_os d_min_s d_mino_ do__nos do_i_os do_in_s do_ino_ dom__os dom_n_s dom_no_ domi__s domi_o_ domin__"

I did give a solid hour trying to tinker with the awk -- but I'm just not skilled enough not to shatter the loop. HAHA!

Thanks again for your efforts, its amazing to see how much I don't know!

Dave aka Ghan
# 7  
Old 02-21-2019
Code:
word=dominos

KEYWORD=$(echo "$word" | awk ' {
  for (i=1; i<=length; i++)
    printf "%s", substr($0, 1, a++) b substr($0, a+1) FS;
  for (j=length; j>1; j--)
   for (i=1; i<j; i++)
    printf "%s", substr($0, 1, length - j) c substr($0, length - j + 2, i-1) c substr($0, (i + length - j + 2)); FS;
  print "";
}' b="%" c="_"
)

echo "$KEYWORD"

This User Gave Thanks to rdrtx1 For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Bash - Inserting non printable character(s) in string variable

Hello. I have a string variable named L_TEMP to test a very simple filter. L_TEMP="50AwL.|KWp9jk" I want to insert a non printable character between K and W. I have try this : linux-g65k:~ # a='50AwL.|K' linux-g65k:~ # b='Wp9jk' linux-g65k:~ # L_TEMP="$a$'\x07'$b" linux-g65k:~ # echo... (6 Replies)
Discussion started by: jcdole
6 Replies

2. Shell Programming and Scripting

Search for a Keyword in file and replace another keyword or add at the end of line

Hi I want to implement something like this: if( keyword1 exists) then check if(keyword2 exists in the same line) then replace keyword 2 with New_Keyword else Add New_Keyword at the end of line end if eg: Check for Keyword JUNGLE and add/replace... (7 Replies)
Discussion started by: dashing201
7 Replies

3. Shell Programming and Scripting

Remove not only the duplicate string but also the keyword of the string in Perl

Hi Perl users, I have another problem with text processing in Perl. I have a file below: Linux Unix Linux Windows SUN MACOS SUN SUN HP-AUX I want the result below: Unix Windows SUN MACOS HP-AUX so the duplicate string will be removed and also the keyword of the string on... (2 Replies)
Discussion started by: askari
2 Replies

4. Shell Programming and Scripting

Assign a variable the nth character of a string.

I see a millioin ways to do this with echo, but what I wan to do is assign a variable the "nth" character of an incoming parameter to a ksh script. $1 will be "pia" I need to assign the first character to stmttype. (10 Replies)
Discussion started by: klarue
10 Replies

5. UNIX for Advanced & Expert Users

couting occurences of a character inside a string and assigning it to a variable

echo "hello123" | tr -dc '' | wc -c using this command i can count the no of times a number from 0-9 occurs in the string "hello123" but how do i save this result inside a variable? if i do x= echo "hello123" | tr -dc '' | wc -c that does not work...plz suggest..thanks (3 Replies)
Discussion started by: arindamlive
3 Replies

6. Shell Programming and Scripting

How to change last character in string with a variable value.

Hey Guys, I have text such as this. 28003,ALCORN,2 28009,BENTON,2 28013,CALHOUN,2 28017,CHICKASAW,2 47017,CARROLL,2 05021,CLAY,0 The last digit after the final "," is a variable value. This is the base file. I have to do further execution on this file later and I need to update the... (7 Replies)
Discussion started by: chagan02
7 Replies

7. Shell Programming and Scripting

Delete first character from a string stored in a variable

Hallo! Example. #!/bin/bash BACKUP_DIR=/home/userx/backups/evolution echo $BACKUP_DIR # delete the first character from the string BACKUP_DIR=$(echo $BACKUP_DIR | cut -c 2-) echo $BACKUP_DIR It works. It does want I want, delete the first character from string in the... (11 Replies)
Discussion started by: linuxinho
11 Replies

8. Shell Programming and Scripting

How to remove the first character on a string in a variable

Hi all, Does anyone know how to code in ksh that will remove the first character in a string variable and replace that variable without the first character? Example: var1=ktest1 will become var1=test1 var2=rtest2 will become var2=test2 Need help please. (10 Replies)
Discussion started by: ryukishin_17
10 Replies

9. Shell Programming and Scripting

read and assign each character from the string to a variable

How... can I read input by a user character by cahracter. And assign each character from the string to a variable? Any help would be greatly appreciated! Thank you! (1 Reply)
Discussion started by: Tek-E
1 Replies

10. Shell Programming and Scripting

Match keyword on string and substitute under vi

Hi guys, with sed when I need to make a substitution inside a line containing a specific keyword, I usually use: sed '/keyword/ s/cat/dog/g' This will substitute "cat" with "dog" on those lines containing "keyword". Now I want to use this inside vi, for several reason that I cannot... (2 Replies)
Discussion started by: lycaon
2 Replies
Login or Register to Ask a Question