Debaditya
Debaditya

Reputation: 2497

Merging of columns in text file

Input of the text file

A | 1 | def | 1432
A | 1 | ffr | 1234
A | 1 | dfs | 3241
A | 2 | asf | 2213

Desired Output

A | 1 | def 1432,ffr 1234,dfs 3241
A | 2 | asf 2213

Merging values related to 2nd column in a single row

Upvotes: 0

Views: 173

Answers (3)

glenn jackman
glenn jackman

Reputation: 247210

awk '
    BEGIN { FS = " \\| "; OFS = SUBSEP = " | " }
    {
        val[$1,$2] = val[$1,$2] sep[$1,$2] $3 " " $4
        sep[$1,$2] = ","
    }
    END { for (key in val) print key, val[key] }
'

This will likely not preserve the order of the input. Also, it uses both the 1st and 2nd columns as the key, but as you say the 1st column does not change it is irrelevant.

Upvotes: 0

yazu
yazu

Reputation: 4660

And here is a Perl attempt:

perl -F'\s+\|\s+' -alne '
$a{$F[1]} .= "$F[2] $F[3],";
END {
  $_ = "A | $_ | $a{$_}", s/,$//, print for sort keys %a;
}' FILE

Upvotes: 2

William Pursell
William Pursell

Reputation: 212654

Your problem is not well specified, but here's a step towards a solution:

awk -F\| '{  a[$1 "|" $2] = a[$1 "|" $2 ] "," $3 $4 }
     END { for( x in a ) print x a[x]}' input |
     sed 's/,/|/'  # Trim leading comma

This will incorrectly delete the first comma in either of the first 2 columns instead of the incorrectly inserted leading comma in the 3rd column of output, and sorts on both of the first 2 columns rather than just the 2nd. Also, the order of the output will be different than the input. There are probably other issues, but this may help.

Upvotes: 2

Related Questions