String copy


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting String copy
# 22  
Old 03-26-2011
Code:
#!/usr/bin/ksh
# INFILE should exists
INFILE=tst

# WORKFILE contains the same entries than INFILE
# but reordered so that brand having the most entries appear first in the file
WORKFILE=tst.w

# TMPFILE & OUTFILE will be generated
TMPFILE=tst.tmp
OUTFILE=tst.out
cat /dev/null>$OUTFILE
# From the initial file, build a list of "brand" (not really in fact, just $1) order by the number of entry it has
# So the brand having the most numerous entries appears at first (here, Telco, Heinz, Schwartz, l'Or\xc3\xa9al...)
#2806 Tesco
# 253 Heinz
# 192 Schwartz
# 174 L'Or\xc3\xa9al
# 146 Cadbury
# 134 Nestle
#  98 Kellogg's
#  94 Cow
#  88 Nivea
#  88 Garnier
#  ...

cat /dev/null>$WORKFILE
awk '{print$1}' $INFILE | sort | uniq -c | sort -k 1n | tail -r | while read a a
do
grep ^"$a " $INFILE | sort -u >>$WORKFILE
done

# if this is the first run of the script, run it with argument 1
# It removes the : since we are going to use it later as a special separator character
# Also the ' are replaced by _ as well as / are replaced with -
# to avoid parsing problem later
if [[ $1 -eq 1 ]];then
sed "s/:/ /g;s/'/_/g;s:/:-:g" $WORKFILE >$TMPFILE
else
sed "s/'/_/g;s:/:-:g" $WORKFILE >$TMPFILE
fi

#================================================
# Main loop  :
#   . read $TMPFILE
#   . ask where it should add the : separator
#   . add the separator at the chosen place for
#      all subsequent lines that start with the
#      same brand name
#   . log those modified entries to $OUTFILE
#================================================

exec 3<$TMPFILE
while read -u3 a
do
        if ( echo "$a" | grep : >/dev/null )
        then
                echo "$a" | sed "s/$B/&:/;s/: /:/" >>$OUTFILE
                continue
        fi

        while :
        do
                if [[ "$f" != x ]];then
                        echo "$a"
                        echo "what is the number of word in this brand [1-9|x] ? (choosing x will set 1 for all remaining entries)"
                        read n
                        case $n in
                                [1-9]) break ;;
                                x) n=1; f="x" ; break;;
                                *) continue ;;
                        esac
                else
                        break
                fi
        done

        B=$(echo "$a" | awk -v V="$n" '{NF=V;$1=$1}1')

        b=$a

        until ! ( echo "$b" | grep ^"$B " >/dev/null )
        do
                echo "$b" | sed "s/$B/&:/;s/: /:/" >>$OUTFILE
                read -u3 b
        done

done
3<&-

This User Gave Thanks to ctsgnb For This Post:
# 23  
Old 03-27-2011
A fantastic little script, thanks. I'm still going to try to scrape the brands directly from the source website but should that fail this will do perfectly. :-)
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Copy a string to another file

OS version: RHEL 6.7 Shell : Bash I have a file like below. It has 500K lines. I want to extract TAG_IDs shown in single quote at the end to copied to another file. As if I had copied the TAG_IDs using block select (Column Select) in modern text editor $ cat file.txt UPDATE TAGREF SET... (9 Replies)
Discussion started by: John K
9 Replies

2. Shell Programming and Scripting

Copy last third char form string

HI Input A.txt ABC907 ABC907_1B_9 ABC985 ABC985_1A_9 ABC985 ABC985_1B_9 ABC985 ABC985_1C_9 ABC05037 ABC05037_1A_9 ABC05037 ABC05037_1B_9 Base of column 2 last third char. If It is A the 1,if B then 2 If C then 3 File B.txt ABC907 ABC907_1B_9 2 ABC985 ABC985_1A_9 1 ABC985... (8 Replies)
Discussion started by: asavaliya
8 Replies

3. Shell Programming and Scripting

Help on Script of Copy String from column

Hello, My DATA: PLOKIJ1234G 12 13 14 15 PLOKIJ1234E 12 13 14 15 PLOKIJ1234F 12 22 33 44 IJNUHB12346 55 66 77 88 IJNUHB12347 32 34 45 67 IJUHU345D 23 23 22 33 IJUHYG23E 11 24 23 23 IJUHYG23F 77 88 99 00 output: PLOKIJ1234 PLOKIJ1234G 12 13 14 15 PLOKIJ1234... (11 Replies)
Discussion started by: asavaliya
11 Replies

4. Shell Programming and Scripting

input a string and copy lines from a file with that string on it

i have a file1 with many lines. i have a script that will let me input a string. for example, APPLE. what i need to do is to copy all lines from file1 where i can find APPLE or any string that i specify and paste in on file 2 thanks in advance! (4 Replies)
Discussion started by: engr.jay
4 Replies

5. Programming

String copy in C language

Hello, I have a text file (FILE.txt) that contains the following information: userAxxx.name@email.com userA userBxxx.name@email.com userB userxxCx.name@email.com userC and more.... in scripting, I can easily do a grep and awk to store an email info into a string... (6 Replies)
Discussion started by: tqlam
6 Replies

6. Shell Programming and Scripting

Copy-paste string automatically

Hi i'm not really sure if it's possible or not in bash. Basically I want to convert a ssh key created with ssh-keygen to putty format. The problem is that puttygen doesn't have an option for supplying passphrase in batch mode so it must be entered manually. For sskey generated with ssh-keygen i use... (2 Replies)
Discussion started by: ktm
2 Replies

7. Shell Programming and Scripting

how to copy one string in ksh into another

Hi Does anybody know if there is a utility/command in ksh which would allow to copy/insert the contents of one string into certain positions of the other? for example: A=" ABCDEF " B="HHH" I need to insert contents of string "B" into string "A" from position 3 to 5, so... (3 Replies)
Discussion started by: aoussenko
3 Replies

8. Shell Programming and Scripting

find a string and copy the string after that

Hi! just want to seek help on this: i have a file wherein i want to find a string and copy the string after that and paste that other string to a new file. ex: TOTAL 123456 find "TOTAL" and copy "123456" and paste "123456" to a new file NOTE: there are many "TOTAL" strings on that... (12 Replies)
Discussion started by: kingpeejay
12 Replies

9. UNIX for Dummies Questions & Answers

Copy or Grep all text below a string

Hello, I am trying to copy all the text from a file below a search string... For example i want to grep all text below the word sure: UNIX for Dummies Questions & Answers If you're not sure where to post a UNIX or Linux question, post it here. All UNIX and Linux newbies welcome !! ... (2 Replies)
Discussion started by: aliaa2a
2 Replies

10. Shell Programming and Scripting

Copy / string.

I'm trying to get a script to copy a url then put it in a different place in the file. Example is currently the script goes to a site takes the urls on it and then puts them into an html file. Only thing is I want to make them into links. So currently lynx goes to the page takes out the urls.... (6 Replies)
Discussion started by: Paulw0t
6 Replies
Login or Register to Ask a Question