Join 2 separate strings into one with alternate tokens.


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Join 2 separate strings into one with alternate tokens.
# 8  
Old 07-05-2011
@ctsgnb Thanks.

Your code also worked.
I have small change in the string2 and want the output in a different way now

Code:
string1=abc|def|ghi
string2=123:2|124:1|125:3

the format is like this
string1=<abc>|<abc>
string2=<1234>:<1 to 24>|<1235>:<1 to 24>

Rule is to have same no of tokens in both the strings, but it may vary depending upon who inputs the values.
Need to have check before itself.

I want the output as follows:
Code:
string3="123:abc:2 124:def:1 125:ghi:3"

I know its bit complicated, but provided the way you people have given replies it seems to be very easy for you.

I am very weak in scripting, but my boss has given me some work on this and I need to deliver it soon...

Appreciate if you can help.
# 9  
Old 07-05-2011
@ctsgnb

Thanks for the pr command. And we can shorten your latest post using tr or sed Smilie
Code:
echo $string1 $string2| sed 's/[ |]/\n/g'| pr -2 -t -s: | xargs

# 10  
Old 07-05-2011
@michaelrozar

For me it works better with tr :

Code:
[ctsgnb@shell ~/sand]$ echo "$string1 $string2" | sed -e "s/[ |]/\n/g" | pr -2ts: | xargs
abcndefnhijn12n13n14:
[ctsgnb@shell ~/sand]$ echo "$string1 $string2" | tr ' |' '\n' | pr -2ts: | xargs
abc:12 def:13 hij:14

---------- Post updated at 01:46 PM ---------- Previous update was at 01:35 PM ----------

@sikku :

Code:
[ctsgnb@shell ~/sand]$ echo "$string1 $string2"  | tr ' |' '\n' | pr -2ts: | sed 's/^\([^:]*\):\([^:]*\)/\2:\1/' | xargs
123:abc:2 124:def:1 125:ghi:3

# 11  
Old 07-05-2011
@ctsgnb
Dint work for me. Smilie
Maybe I am using sun OS?

Code:
$ echo $string1
abc|def|hij
$ echo $string2
123:1|124:2|125:3
$ echo "$string1 $string2"  | tr ' |' '\n' | pr -2ts: | sed 's/^\([^:]*\):\([^:]*\)/\2:\1/' | xargs
123:abc|def|hij:1|124:2|125:3

I tried with this:
Code:
paste -d: <((echo $string2 | sed 's/\|/ /g' | xargs -n1) | cut -f1 -d:) <(echo $string1 | sed 's/\|/ /g' | xargs -n1)  <((echo $string2 | sed 's/\|/ /g' | xargs -n1) | cut -f2 -d: ) | xargs
123:abc:1 124:def:2 125:hij:3

Is there any possibility to reduce the code?
# 12  
Old 07-05-2011
@sikku, try again separating the option of pr command, and make sure you didn't forget anything in the sed syntax.

Code:
echo "$string1 $string2"  | tr ' |' '\n' | pr -2 -t -s: | sed 's/^\([^:]*\):\([^:]*\)/\2:\1/' | xargs

---------- Post updated at 02:12 PM ---------- Previous update was at 02:10 PM ----------

then you can pass the statement step by step to see what doesn't behave as expected :

See how the final output is built step by step :

Code:
[ctsgnb@shell ~/sand]$ echo "$string1 $string2"
abc|def|ghi 123:2|124:1|125:3
[ctsgnb@shell ~/sand]$ echo "$string1 $string2"  | tr ' |' '\n'
abc
def
ghi
123:2
124:1
125:3
[ctsgnb@shell ~/sand]$ echo "$string1 $string2"  | tr ' |' '\n' | pr -2 -t -s:
abc:123:2
def:124:1
ghi:125:3
[ctsgnb@shell ~/sand]$ echo "$string1 $string2"  | tr ' |' '\n' | pr -2 -t -s: | sed 's/^\([^:]*\):\([^:]*\)/\2:\1/'
123:abc:2
124:def:1
125:ghi:3
[ctsgnb@shell ~/sand]$ echo "$string1 $string2"  | tr ' |' '\n' | pr -2 -t -s: | sed 's/^\([^:]*\):\([^:]*\)/\2:\1/' | xargs
123:abc:2 124:def:1 125:ghi:3
[ctsgnb@shell ~/sand]$

# 13  
Old 07-05-2011
I told you, it behaves in a different way.

Code:
$  echo "$string1 $string2"
abc|def|hij 123:2|124:1|125:3

$  echo "$string1 $string2"  | tr ' |' '\n'
abc|def|hij
123:2|124:1|125:3

$  echo "$string1 $string2"  | tr ' |' '\n'  | pr -2 -t -s:
abc|def|hij:123:2|124:1|125:3

$ echo "$string1 $string2"  | tr ' |' '\n' | pr -2 -t -s: | sed 's/^\([^:]*\):\([^:]*\)/\2:\1/' | xargs
123:abc|def|hij:2|124:1|125:3

---------- Post updated at 07:30 AM ---------- Previous update was at 07:26 AM ----------

Check this output:
Code:
$ echo "$string1 $string2"  | tr '|' '\n'
abc
def
hij 123:2
124:1
125:3

---------- Post updated at 07:35 AM ---------- Previous update was at 07:30 AM ----------

Look at this now:
Code:
$ echo "$string1 $string2"  | tr '|' '\n' | tr ' ' '\n'
abc
def
hij
123:2
124:1
125:3

lol.. I have no idea how its happening?

now the full command works:
Code:
$ echo "$string1 $string2"  | tr '|' '\n' | tr ' ' '\n' | pr -2 -t -s: | sed 's/^\([^:]*\):\([^:]*\)/\2:\1/' | xargs
123:abc:2 124:def:1 125:hij:3

# 14  
Old 07-05-2011
Merge the two tr statement into one :
Code:
echo "$string1 $string2"  | tr ' |' '\n\n'

Jean-Pierre.
This User Gave Thanks to aigles 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

Help to join separate lines in a single one from xml file

Hi all, I need help to parse this xml file that has paragraphs broken in different lines and I would like to join in a single line. I hope you can understand my explanation. Thanks for any help/direction. The script could be in bash, awk, ruby, perl whatever please In the output I want:... (8 Replies)
Discussion started by: Ophiuchus
8 Replies

2. Shell Programming and Scripting

Single grep to multiple strings with separate output per string

I need to grep multiple strings from a particular file. I found the use of egrep "String1|String2|String3" file.txt | wc-l Now what I'm really after is that I need to separate word count per each string found. I am trying to keep it to use the grep only 1 time. Can you guys help ? ... (9 Replies)
Discussion started by: nms
9 Replies

3. Programming

Reading tokens

I have a String class with a function that reads tokens using a delimiter. For example String sss = "6:8:12:16"; nfb = sss.nfields_b (':'); String tkb1 = sss.get_token_b (':'); String tkb2 = sss.get_token_b (':'); String tkb3 = sss.get_token_b (':'); String tkb4 =... (1 Reply)
Discussion started by: kristinu
1 Replies

4. UNIX for Dummies Questions & Answers

How to use the the join command to join multiple files by a common column

Hi, I have 20 tab delimited text files that have a common column (column 1). The files are named GSM1.txt through GSM20.txt. Each file has 3 columns (2 other columns in addition to the first common column). I want to write a script to join the files by the first common column so that in the... (5 Replies)
Discussion started by: evelibertine
5 Replies

5. UNIX for Dummies Questions & Answers

Join 2 files with multiple columns: awk/grep/join?

Hello, My apologies if this has been posted elsewhere, I have had a look at several threads but I am still confused how to use these functions. I have two files, each with 5 columns: File A: (tab-delimited) PDB CHAIN Start End Fragment 1avq A 171 176 awyfan 1avq A 172 177 wyfany 1c7k A 2 7... (3 Replies)
Discussion started by: InfoSeeker
3 Replies

6. Shell Programming and Scripting

Replacing tokens

Hi all, I have a variable with value DateFileFormat=NAME.CODE.CON.01.#.S001.V1.D$.hent.txt I want this variable to get replaced with : var2 is a variable with string value DateFileFormat=NAME\\.CODE\\.CON\\.01\\.var2\\.S001\\.V1\\.D+\\.hent\\.txt\\.xml$ Please Help (3 Replies)
Discussion started by: abhinav192
3 Replies

7. Programming

sql,multiple join,outer join issue

example sql: select a.a1,b.b1,c.c1,d.d1,e.e1 from a left outer join b on a.x=b.x left outer join c on b.y=c.y left outer join d on d.z=a.z inner join a.t=e.t I know how single outer or inner join works in sql. But I don't really understand when there are multiple of them. can... (0 Replies)
Discussion started by: robbiezr
0 Replies

8. UNIX for Dummies Questions & Answers

How to join two strings together

There is a file: !EN ih n w ey I want to join the current instance with its previous instance together, such as: previous_instance-B+current_instance, there "-B+" is fixed iterm, the file after operate look like: !EN start-B+!EN ih !EN-B+ih n ih-B+n w... (1 Reply)
Discussion started by: Jenny.palmy
1 Replies

9. Shell Programming and Scripting

: + : more tokens expected

Hello- Trying to add two numbers in a ksh shell scripts and i get this error every time I execute stat1_ex.ksh: + : more tokens expected stat1=`cat .stat1a.tmp | cut -f2 -d" "` stat2=`cat .stat2a.tmp | cut -f2 -d" "` j=$(($stat1 + $stat2)) # < Here a the like the errors out echo $j... (3 Replies)
Discussion started by: Nomaad
3 Replies

10. UNIX for Dummies Questions & Answers

tokens in unix ?

im trying to remove all occurences of " OF xyz " in a file where xyz could be any word assuming xyz is the last word on the line but I won't always be. at the moment I have sed 's/OF.*//' but I want a nicer solution which could be in pseudo code sed 's/OF.* (next token)//' Is... (6 Replies)
Discussion started by: seaten
6 Replies
Login or Register to Ask a Question