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
.
rdrtx1
April 26, 2016, 7:27pm
3
try also:
echo "" | cat infile - | awk '{printf (NR == 1 ? $NF : ((! a[$1]) ? "\n" : " ") $NF) ; a[$1]++ }'
RudiC
April 27, 2016, 3:19am
4
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