1844534 Members
2870 Online
110233 Solutions
New Discussion

Script question

 
SOLVED
Go to solution
Roger Baptiste
Honored Contributor

Script question


Hi,

Here is a sample of a file which contains PV paths for Lunids (i have simplified it sufficiently for this example):

***
002d /dev/dsk/c6t0d0 /dev/dsk/c6t0d1 /dev/dsk/c6t0d2 /dev/dsk/c6t0d3
002d /dev/dsk/c8t0d0 /dev/dsk/c8t0d1 /dev/dsk/c8t0d2 /dev/dsk/c8t0d3
002e /dev/dsk/c6t0d4 /dev/dsk/c6t0d5 /dev/dsk/c6t0d6 /dev/dsk/c6t0d7
002e /dev/dsk/c8t0d4 /dev/dsk/c8t0d5 /dev/dsk/c8t0d6 /dev/dsk/c8t0d7
****

I would like to run a script on this file and rearrange it to get the following output:
***
/dev/dsk/c6t0d0 /dev/dsk/c8t0d0 /dev/dsk/c6t0d1 /dev/dsk/c8t0d1 /dev/dsk/c8t0d2 /dev/dsk/c6t0d2 /dev/dsk/c8t0d3 /dev/dsk/c6t0d3
and so on
***

That is, it should take two successive lines and combine them in a single line with the format specified. Please note, the arrangement of pvpaths.

thanks
raj
Take it easy.
7 REPLIES 7
Robin Wakefield
Honored Contributor
Solution

Re: Script question

Hi Raj,

An inelegant method, but it should work:

=============================
#!/bin/ksh

file=$1
cat file | while read line1; do
read line2
echo $line1 | read id d1 d2 d3 d4
echo $line2 | read id d5 d6 d7 d8
echo $d1 $d5 $d2 $d6 $d7 $d3 $d8 $d4
done
=============================

Run it with:

# script filename

Rgds, Robin.
Robin Wakefield
Honored Contributor

Re: Script question

make that cat $file !!
Jdamian
Respected Contributor

Re: Script question

You can use the getline function of AWK. AWK splits each input line in $1, $2, $3... ($0 means the whole input line).

You can split an input line ($0) and store into an array (for instance L1) using the split() function.

Then you use the getline function to read the next input line and split and store again in other array (for instance L2).

L1[1], L2[2], ... and L2[1], L2[2]... are then available for whatever you need.

I hope this be useful.


H.Merijn Brand (procura
Honored Contributor

Re: Script question

l1:/tmp 116 > perl -ne '@a=split;$_=<>;@b=split;for(1..$#a){print"$a[$_] $b[$_] "};print"\n"' file
/dev/dsk/c6t0d0 /dev/dsk/c8t0d0 /dev/dsk/c6t0d1 /dev/dsk/c8t0d1 /dev/dsk/c6t0d2 /dev/dsk/c8t0d2 /dev/dsk/c6t0d3 /dev/dsk/c8t0d3
/dev/dsk/c6t0d4 /dev/dsk/c8t0d4 /dev/dsk/c6t0d5 /dev/dsk/c8t0d5 /dev/dsk/c6t0d6 /dev/dsk/c8t0d6 /dev/dsk/c6t0d7 /dev/dsk/c8t0d7
l1:/tmp 117 >
Enjoy, Have FUN! H.Merijn
H.Merijn Brand (procura
Honored Contributor

Re: Script question

Even shorter:

l1:/tmp 117 > perl -nae '$_=<>;@b=split;for(1..$#F){print"$F[$_] $b[$_] "};print"\n"' file
/dev/dsk/c6t0d0 /dev/dsk/c8t0d0 /dev/dsk/c6t0d1 /dev/dsk/c8t0d1 /dev/dsk/c6t0d2 /dev/dsk/c8t0d2 /dev/dsk/c6t0d3 /dev/dsk/c8t0d3
/dev/dsk/c6t0d4 /dev/dsk/c8t0d4 /dev/dsk/c6t0d5 /dev/dsk/c8t0d5 /dev/dsk/c6t0d6 /dev/dsk/c8t0d6 /dev/dsk/c6t0d7 /dev/dsk/c8t0d7
l1:/tmp 118 >
Enjoy, Have FUN! H.Merijn
Roger Baptiste
Honored Contributor

Re: Script question


Thanks Robin. That was quick help.

Procura - I havent tried the perl liner which you sent, but will do so later. But, i noticed one thing in the output of your script. It doesnt balance the last two PVs.

-raj
Take it easy.
H.Merijn Brand (procura
Honored Contributor

Re: Script question

Maybe I misread your quest. I did


aa A1 A2 A3 A4 ...
aa B1 B2 B3 B4 ...
bb C1 C2 C3 C4 ...
bb D1 D2 D3 D4 ...

=>

A1 B1 A2 B2 A3 B3 A4 B4 ...
C1 D1 C2 D2 C3 D3 C4 D4 ...
Enjoy, Have FUN! H.Merijn