Relocation strings

Hi all,

I would like to relocate strings based on the index number.

Index numbers are shown on the first column, the strings are shown on the second column.

 1        path_sparc_ifu_dec_104  
 1        path_sparc_ifu_dec_105  
 2        path_sparc_ifu_dec_63  
 2        path_sparc_ifu_dec_92 
 3        path_sparc_ifu_dec_39  
 4        path_sparc_ifu_dec_43  
 4        path_sparc_ifu_dec_71  
 5        path_sparc_ifu_dec_103  
 6        path_sparc_ifu_dec_99  
 7        path_sparc_ifu_dec_55 
 7        path_sparc_ifu_dec_75  
 7        path_sparc_ifu_dec_93  

If the index number is 1, corresponding strings are placed on the first row. On the same time, the index number is removed.

Desired output is:

path_sparc_ifu_dec_104  path_sparc_ifu_dec_105  
path_sparc_ifu_dec_63  path_sparc_ifu_dec_92 
path_sparc_ifu_dec_39  
path_sparc_ifu_dec_43  path_sparc_ifu_dec_71  
path_sparc_ifu_dec_103  
path_sparc_ifu_dec_99  
path_sparc_ifu_dec_55 path_sparc_ifu_dec_75 path_sparc_ifu_dec_93  

I think awk/sed can read the file column by column and relocate the strings, but I need help!

I would appreciate any help for this problem.

Best,

Jaeyoung

Perhaps something like:

awk '
NR > 1 && last != $1 {
	printf("\n")
}
last != $1 {
	printf("%s", $2)
	last = $1
	next
}
{	printf(" %s", $2)
}
END {	printf("\n")
}' file

which with your sample data in a file named file produces the output:

path_sparc_ifu_dec_104 path_sparc_ifu_dec_105
path_sparc_ifu_dec_63 path_sparc_ifu_dec_92
path_sparc_ifu_dec_39
path_sparc_ifu_dec_43 path_sparc_ifu_dec_71
path_sparc_ifu_dec_103
path_sparc_ifu_dec_99
path_sparc_ifu_dec_55 path_sparc_ifu_dec_75 path_sparc_ifu_dec_93

which doesn't have any trailing spaces (unlike your sample output which sometimes has trailing spaces and sometimes does not have trailing spaces) and which has a single space between output fields (unlike your sample output which has varying numbers of spaces between output fields).

As always, if you want to try this on a Solaris/SunOS system, change awk to /usr/xpg4/bin/awk or nawk .

try also:

echo "" | cat infile - | awk '{printf (NR == 1 ? $NF : ((! a[$1]) ? "\n" : " ") $NF) ;  a[$1]++ }'

If the input is NOT sorted by index values, try

awk '{T[$1] = T[$1] $2 " "; if ($1 > MX) MX = $1} END {for (i=1; i<=MX; i++) print T}' file
path_sparc_ifu_dec_104 path_sparc_ifu_dec_105 
path_sparc_ifu_dec_63 path_sparc_ifu_dec_92 
path_sparc_ifu_dec_39 
path_sparc_ifu_dec_43 path_sparc_ifu_dec_71 
path_sparc_ifu_dec_103 
path_sparc_ifu_dec_99 
path_sparc_ifu_dec_55 path_sparc_ifu_dec_75 path_sparc_ifu_dec_93