Choose a single word from a wordlist by matching the letters it contains?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Choose a single word from a wordlist by matching the letters it contains?
# 15  
Old 03-13-2010
Quote:
Originally Posted by radoulov
Excellent point!
This should handle it too:
Code:
perl -nle'BEGIN {
  @_{split / /, shift} = (1) x length($ARGV[0]);
  }
keys %_ <= grep $_{$_}, split // and print;
' 'n i o m s c t a' infile



---------- Post updated at 07:17 PM ---------- Previous update was at 06:17 PM ----------

Based on dennis.jacob's idea, with the almighty Z-Shell Smilie

Code:
letters=(n i o m s c t a)
letters=${(j::)${(uo)letters}}
  
while read -r; do
  [[ ${(j::)${(ous::)REPLY}} == $letters ]] &&
    print -- $REPLY
done<wordlist

Thank you very much but I have this bug:
Let's say that in the wordlist is the word "1a2b3c"
Running your first program will have output:
alex@lol-pc:~/Desktop$ ./ty
121212
131313
123123
21122112
abcd1234
1a2b3c
cccccc
alex@lol-pc:~/Desktop$
which contains the 1a2b3c but not only this. Can you fix this?
# 16  
Old 03-13-2010
Yes,
based on dennis.jacob's and alister's ideas again:

Code:
perl -nle'BEGIN {
  $l = join "", sort grep !$_{$_}++ , split / /, shift;
  }
%_ = (); $w = join "", sort grep !$_{$_}++ , split //;
print if $w eq $l;
' '1 a 2 b 3 c' wordlist

If you prefer to pass the chars without spaces:

Code:
perl -nle'BEGIN {
  $l = join "", sort grep !$_{$_}++ , split //, shift;
  }
%_ = (); $w = join "", sort grep !$_{$_}++ , split //;
print if $w eq $l;
' '1a2b3c' wordlist


Last edited by radoulov; 03-14-2010 at 05:35 AM.. Reason: adjusted attribution
# 17  
Old 03-13-2010
I may have lost track of the requirements, so to not waste anyone's time I will state what the following code accomplishes: It reads one word lines and compares those words against a list of allowable letters. If the word consists of nothing but those letters, possibly occuring more than once, the word is considered a match and is printed.

As simple as I could manage without using awk or perl (I have nothing but the utmost respect for those tools, but sometimes I'm a masochist Smilie):

Code:
#!/bin/sh

l=acimnost  #allowed letters must be sorted
while read w; do
    [ $l = "$(echo $w | sed 's/./& /g;y/ /\n/' | sort | tr -ds \\n $l)" ] && echo $w
done < data

Parameterizing it to accept the list of letters and the wordlist file as arguments is trivial and left as an exercise to whomever wishes to do it.

Cheers,
Alister
# 18  
Old 03-13-2010
Yep,
alister's shell solution works too, the only drawback, in my opinion, is the performance (too many forks/execs per record in the pipeline).
# 19  
Old 03-13-2010
Hi, radoulov:

Sir, how dare you doubt the performance of my code. I will have you know that my shell is faster than a speeding bullet. heheheh Smilie

Seriously, though, performance and efficiency were most definitely not a priority in that code's design. It was just a sh exercise for fun.

Cheers,
Alister
# 20  
Old 03-13-2010
Sure, sorry Smilie
If I have a time later, I'll try with POSIX shell too.
# 21  
Old 03-14-2010
Code:
$ 
$ cat wordlist.txt
aardvark
aardvarks
aardwolf
aardwolves
Aaren
Aargau
aargh
Aarhus
Aarika
Aaron
monastic
montana
monica
action
tomcat
mission
tintin
moomoo
$ 
$ perl -M"Sort::Packed" -lne '$x=$_; Sort::Packed::sort_packed C => $_; print $x if /acimnost/' wordlist.txt
monastic
$ 
$ cat wordlist_1.txt
121212
131313
123123
21122112
abcd1234
1a2b3c
cccccc
$ 
$ perl -M"Sort::Packed" -lne '$x=$_; Sort::Packed::sort_packed C => $_; print $x if /123abc/' wordlist_1.txt
1a2b3c
$ 
$

tyler_durden
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Performance assessment of using single or combined pattern matching

Hi, I want to know which pattern matching technique will be giving better performance and quick result. I will be having the patterns in a file and want to read that patterns and search through a whole file of say 70 MB size. whether if i initially create a pattern matching string while... (7 Replies)
Discussion started by: ananan
7 Replies

2. Shell Programming and Scripting

Bash directory loop, but only choose those folders with specific word in it

Hello, how in bash i can get directory loop, but only choose those folders with specific word in it, so it will only echo those with specific word #!/bin/bash for filename in /home/test/* do if ; then echo $filename; fithx! (4 Replies)
Discussion started by: ZerO13
4 Replies

3. Shell Programming and Scripting

Creating single pattern for matching multiple files.

Hi friends, I have a some files in a directory. for example 856-abc 856-def 851-abc 945-def 956-abc 852-abc i want to display only those files whose name starts with 856* 945* and 851* using a single pattern. i.e 856-abc 856-def 851-abc 945-def the rest of the two files... (2 Replies)
Discussion started by: Little
2 Replies

4. Shell Programming and Scripting

Word matching and write other data

Hi all, I have 7 words CAD CD HT RA T1D T2D BD Now I have 1 file which contain data in large number of rows and columns from 2 nd column onwards it contain any of these 7 words or may be more than one words among above 7 words: these 7 names are present in starting from 2nd ... (7 Replies)
Discussion started by: manigrover
7 Replies

5. Shell Programming and Scripting

Matching single quote in a regular expression

I trying to match the begining of the following line in a perl script with a regular expression. $ENV{'ORACLE_HOME'} I tried this regluar expession: /\$ENV\{\'ORACLE_HOME\'\}/ Instead of match, I got a blank prompt > It seems to be a problem with the single quote. If I take it... (11 Replies)
Discussion started by: JC9672
11 Replies

6. Shell Programming and Scripting

Extract single word from lines

Hi I have a huge line like the following: this word and many other words AA122134 other and other words and AA224466 and other other other other word AA667210 words I only want extract the words AA?????? and put them in a column, how could i do ? thx so much! (7 Replies)
Discussion started by: AdminLew
7 Replies

7. UNIX for Dummies Questions & Answers

grep only word matching the pattern

Hi gurus, A file contains many words in format "ABC.XXXX.XXXX.X.GET.LOG" (X->varying). Now my shell script want this list (only words in formatABC.XXXX.XXXX.X.GET.LOG ) to continue the process. Pls help me. Thanks, Poova. (8 Replies)
Discussion started by: poova
8 Replies

8. UNIX for Dummies Questions & Answers

Print last 2 letters in a word

Hi, I have a file which has the below information tm.orbit72 tm.orbit12 tm.orbit78 tm.orbitye I want to print the last two letters in the above file. Please let me know how can i do that. (6 Replies)
Discussion started by: Krrishv
6 Replies

9. Shell Programming and Scripting

Matching multiples of a single character using sed and awk

Hi, I have a file 'imei_01.txt' having the following contents: $ cat imei_01.txt a123456 bbr22135 yet223 where I want to check whether the expression 'first single alphabet followed by 6 digits' is present in the file (here it is the first record 'a123456') I am using the following... (5 Replies)
Discussion started by: royalibrahim
5 Replies

10. Shell Programming and Scripting

matching a letter in a word

hi, if i have a string of letters and seperatly i have a single letter. how do i check whether that specific letter is in my string aswell? any ideas? (2 Replies)
Discussion started by: Furqan_79
2 Replies
Login or Register to Ask a Question